fix the infinite loop in tf importer of 3.4 branch
authorzihaomu <zihaomu@outlook.com>
Tue, 15 Nov 2022 03:42:10 +0000 (11:42 +0800)
committerzihaomu <zihaomu@outlook.com>
Tue, 15 Nov 2022 03:42:10 +0000 (11:42 +0800)
modules/dnn/src/tensorflow/tf_graph_simplifier.cpp

index fc0fc94d768cfdc00d44b836b801e72bedeaed31..13d7028a87f714cf09836b253e50b3f80f41112e 100644 (file)
@@ -829,12 +829,19 @@ void RemoveIdentityOps(tensorflow::GraphDef& net)
             IdentityOpsMap::iterator it = identity_ops.find(input_op_name);
 
             if (it != identity_ops.end()) {
+                std::set<String> loopCheckSet;
                 // In case of Identity after Identity
                 while (true)
                 {
                     IdentityOpsMap::iterator nextIt = identity_ops.find(it->second);
                     if (nextIt != identity_ops.end())
+                    {
+                        // Loop check
+                        if (loopCheckSet.find(it->second) != loopCheckSet.end())
+                            CV_Error(Error::StsError, "Found a loop in your input Tensorflow model, which is illegal!");
+                        loopCheckSet.insert(it->second);
                         it = nextIt;
+                    }
                     else
                         break;
                 }