1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0030708: Modeling Data - Exception is raised while initializing TopoDS_Iterator with null shape

Added protection from null shapes to TopoDS_Iterator::Initialize method.
This commit is contained in:
emv
2019-05-13 12:32:09 +03:00
parent dbfe78b820
commit 7816900b8e
4 changed files with 76 additions and 6 deletions

View File

@@ -4310,6 +4310,54 @@ static Standard_Integer OCC26313(Draw_Interpretor& di,Standard_Integer n,const c
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_19(Draw_Interpretor& theCommands) {
const char *group = "QABugs";
@@ -4401,5 +4449,11 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) {
theCommands.Add ("OCC26313", "OCC26313 result shape", __FILE__, OCC26313, 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;
}

View File

@@ -23,7 +23,6 @@
//function : Initialize
//purpose :
//=======================================================================
void TopoDS_Iterator::Initialize(const TopoDS_Shape& S,
const Standard_Boolean cumOri,
const Standard_Boolean cumLoc)
@@ -36,13 +35,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);
}
}
@@ -58,9 +60,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);
}
}

View File

@@ -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"
}

View File

@@ -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"
}