]> OCCT Git - occt-copy.git/commitdiff
0030708: Modeling Data - Exception is raised while initializing TopoDS_Iterator with...
authoremv <emv@opencascade.com>
Mon, 13 May 2019 09:32:09 +0000 (12:32 +0300)
committeremv <emv@opencascade.com>
Wed, 15 May 2019 11:09:13 +0000 (14:09 +0300)
Added protection from null shapes to TopoDS_Iterator::Initialize method.

src/QABugs/QABugs_20.cxx
src/TopoDS/TopoDS_Iterator.cxx
tests/bugs/moddata_3/bug30708_1 [new file with mode: 0644]
tests/bugs/moddata_3/bug30708_2 [new file with mode: 0644]

index 4b7a1160d0bd42290bd3700ff6f980554a92e2e9..53d6c51c281c503f38c2338dc50b07be8e10c0cd 100644 (file)
@@ -2531,6 +2531,54 @@ static Standard_Integer OCC28131 (Draw_Interpretor&, Standard_Integer theNbArgs,
   return 0;
 }
 
+//=======================================================================
+//function : OCC30708_1 
+//purpose  : Tests initialization of the TopoDS_Iterator with null shape
+//=======================================================================
+static Standard_Integer OCC30708_1 (Draw_Interpretor& di, Standard_Integer, const char**)
+{
+  TopoDS_Iterator it;
+  try
+  {
+    OCC_CATCH_SIGNALS
+
+    TopoDS_Shape empty;
+    it.Initialize (empty);
+
+  }
+  catch (Standard_Failure)
+  {
+    di << "Cannot initialize TopoDS_Iterator with null shape\n";
+    return 0;
+  }
+
+  if (it.More())
+    di << "Incorrect Iterator initialization: method More() returns true on null shape\n";
+
+  return 0;
+}
+
+//=======================================================================
+//function : OCC30708_2
+//purpose  : Tests initialization of the BRepLib_MakeWire with null wire
+//=======================================================================
+static Standard_Integer OCC30708_2 (Draw_Interpretor& di, Standard_Integer, const char**)
+{
+  try
+  {
+    OCC_CATCH_SIGNALS
+
+    TopoDS_Wire empty;
+    BRepLib_MakeWire aWBuilder (empty);
+  }
+  catch (Standard_Failure)
+  {
+    di << "Cannot initialize BRepLib_MakeWire with null wire\n";
+  }
+
+  return 0;
+}
+
 void QABugs::Commands_20(Draw_Interpretor& theCommands) {
   const char *group = "QABugs";
 
@@ -2560,5 +2608,11 @@ void QABugs::Commands_20(Draw_Interpretor& theCommands) {
                   __FILE__, OCC28887, group);
   theCommands.Add("OCC28131", "OCC28131 name: creates face problematic for offset", __FILE__, OCC28131, group);
 
+  theCommands.Add ("OCC30708_1", "Tests initialization of the TopoDS_Iterator with null shape",
+                   __FILE__, OCC30708_1, group);
+
+  theCommands.Add ("OCC30708_2", "Tests initialization of the BRepLib_MakeWire with null shape",
+                   __FILE__, OCC30708_2, group);
+
   return;
 }
index 0929fd97b281503766592bcca92efeb3d6b90509..eb5aab901065c27b8a1a5b50fa1cf5d3ce2564eb 100644 (file)
@@ -38,13 +38,16 @@ void TopoDS_Iterator::Initialize(const TopoDS_Shape& S,
     myOrientation = S.Orientation();
   else
     myOrientation = TopAbs_FORWARD;
-  myShapes.Initialize(S.TShape()->Shapes());
+
+  if (S.IsNull())
+    myShapes = TopoDS_ListIteratorOfListOfShape();
+  else
+    myShapes.Initialize(S.TShape()->myShapes);
+
   if (More()) {
     myShape = myShapes.Value();
     myShape.Orientation(TopAbs::Compose(myOrientation,myShape.Orientation()));
-    //modified by NIZNHY-PKV Fri Jan 16 07:42:30 2009f
     if (!myLocation.IsIdentity())
-    //modified by NIZNHY-PKV Fri Jan 16 07:42:37 2009t
       myShape.Move(myLocation);
   }
 }
@@ -60,9 +63,7 @@ void TopoDS_Iterator::Next()
   if (More()) {
     myShape = myShapes.Value();
     myShape.Orientation(TopAbs::Compose(myOrientation,myShape.Orientation()));
-    //modified by NIZNHY-PKV Fri Jan 16 07:42:30 2009f
     if (!myLocation.IsIdentity())
-    //modified by NIZNHY-PKV Fri Jan 16 07:42:37 2009t
       myShape.Move(myLocation);
   }
 }
diff --git a/tests/bugs/moddata_3/bug30708_1 b/tests/bugs/moddata_3/bug30708_1
new file mode 100644 (file)
index 0000000..4d13220
--- /dev/null
@@ -0,0 +1,8 @@
+puts "================"
+puts "0030708: Modeling Data - Crash while initializing TopoDS_Iterator with null shape"
+puts "================"
+puts ""
+
+if { [regexp "Cannot initialize" [OCC30708_1]]} {
+  puts "Error: Cannot initialize TopoDS_Iterator with null shape"
+}
diff --git a/tests/bugs/moddata_3/bug30708_2 b/tests/bugs/moddata_3/bug30708_2
new file mode 100644 (file)
index 0000000..e3a8e5a
--- /dev/null
@@ -0,0 +1,8 @@
+puts "================"
+puts "0030708: Modeling Data - Crash while initializing TopoDS_Iterator with null shape"
+puts "================"
+puts ""
+
+if { [regexp "Cannot initialize" [OCC30708_2]]} {
+  puts "Error: Cannot initialize BRepLib_MakeWire with null wire"
+}