From: ika Date: Thu, 28 Feb 2019 14:56:47 +0000 (+0300) Subject: 0030533: Data Exchange - Crash during STEP import. X-Git-Tag: V7_4_0_beta~232 X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff_plain;h=7b93ae3c5ea3a9fdaaf6d29d4fbf0d4aff74d219 0030533: Data Exchange - Crash during STEP import. Add Null checks to avoid crash during reading faces without bounds. --- diff --git a/src/STEPCAFControl/STEPCAFControl_Reader.cxx b/src/STEPCAFControl/STEPCAFControl_Reader.cxx index 15a248899b..8852b5684b 100644 --- a/src/STEPCAFControl/STEPCAFControl_Reader.cxx +++ b/src/STEPCAFControl/STEPCAFControl_Reader.cxx @@ -4547,6 +4547,8 @@ void STEPCAFControl_Reader::ExpandShell(const Handle(StepShape_ConnectedFaceSet) // Access face bounds Handle(StepShape_HArray1OfFaceBound) aWires = aFace->Bounds(); + if (aWires.IsNull()) + continue; for (Standard_Integer w = aWires->Lower(); w <= aWires->Upper(); ++w) { const Handle(StepShape_Loop)& aWire = aWires->Value(w)->Bound(); @@ -4564,7 +4566,12 @@ void STEPCAFControl_Reader::ExpandShell(const Handle(StepShape_ConnectedFaceSet) Handle(StepShape_HArray1OfOrientedEdge) anEdges = anEdgeLoop->EdgeList(); for (Standard_Integer e = anEdges->Lower(); e <= anEdges->Upper(); ++e) { - Handle(StepShape_Edge) anEdge = anEdges->Value(e)->EdgeElement(); + Handle(StepShape_OrientedEdge) anOrientedEdge = anEdges->Value(e); + if (anOrientedEdge.IsNull()) + continue; + Handle(StepShape_Edge) anEdge = anOrientedEdge->EdgeElement(); + if (anEdge.IsNull()) + continue; // Record CAF data SettleShapeData(anEdge, RootLab, ShapeTool, TP); diff --git a/tests/bugs/step/bug30533 b/tests/bugs/step/bug30533 new file mode 100644 index 0000000000..e2f02266a7 --- /dev/null +++ b/tests/bugs/step/bug30533 @@ -0,0 +1,25 @@ +puts "===================================================" +puts " 0030533: Data Exchange - Crash during STEP import." +puts "===================================================" +puts "" + +pload DCAF + +param read.stepcaf.subshapes.name On + +ReadStep D [locate_data_file bug30533.stp] + +# Check imported names +set name [GetName D 0:1:1:5:1] +if {$name != "NONE"} { + puts "Error: wrong name of subshape" +} +set name [GetName D 0:1:1:5:2] +if {$name != "NONE"} { + puts "Error: wrong name of subshape" +} + +Close D + +# return param to default value +param read.stepcaf.subshapes.name Off