0024126: Crash on fixing the attached shape
authoremv <emv@opencascade.com>
Thu, 29 Aug 2013 09:28:02 +0000 (13:28 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 29 Aug 2013 09:28:51 +0000 (13:28 +0400)
Added the check for an empty list.
Adding test case for issue CR24126

src/ShapeFix/ShapeFix_Face.cxx
tests/bugs/heal/bug24126 [new file with mode: 0755]

index 108d47f..9043a1d 100755 (executable)
@@ -2211,18 +2211,24 @@ Standard_Boolean ShapeFix_Face::FixSplitFace(const TopTools_DataMapOfShapeListOf
   TopoDS_Shape S = myFace;
   if ( ! Context().IsNull() ) 
     S = Context()->Apply ( myFace );
-  Standard_Integer NbWires=0, NbWiresNew=0;
+  Standard_Integer NbWires=0, NbWiresNew=0, NbEdges;
   for(TopoDS_Iterator iter(S,Standard_False); iter.More(); iter.Next()) {
-    if(iter.Value().ShapeType() != TopAbs_WIRE || 
-       (iter.Value().Orientation() != TopAbs_FORWARD && iter.Value().Orientation() != TopAbs_REVERSED))
+    const TopoDS_Shape& aShape = iter.Value();
+    if(aShape.ShapeType() != TopAbs_WIRE || 
+       (aShape.Orientation() != TopAbs_FORWARD && aShape.Orientation() != TopAbs_REVERSED))
         continue;
-    TopoDS_Wire wire = TopoDS::Wire ( iter.Value() );
+    TopoDS_Wire wire = TopoDS::Wire ( aShape );
     NbWires++;
     if(MapWires.IsBound(wire)) {
       // if wire not closed --> stop split and return false
       Handle(ShapeExtend_WireData) sewd = new ShapeExtend_WireData(wire);
+      NbEdges = sewd->NbEdges();
+      if (NbEdges == 0) {
+        continue;
+      }
+      //
       TopoDS_Edge E1 = sewd->Edge(1);
-      TopoDS_Edge E2 = sewd->Edge(sewd->NbEdges());
+      TopoDS_Edge E2 = sewd->Edge(NbEdges);
       TopoDS_Vertex V1,V2;
       ShapeAnalysis_Edge sae;
       V1=sae.FirstVertex(E1);
diff --git a/tests/bugs/heal/bug24126 b/tests/bugs/heal/bug24126
new file mode 100755 (executable)
index 0000000..35d3b32
--- /dev/null
@@ -0,0 +1,13 @@
+puts "================"
+puts "OCC24126"
+puts "================"
+puts ""
+######################################################################################
+# Crash on fixing the attached shape
+######################################################################################
+
+catch {pload XDE}
+
+restore [locate_data_file bug24126_Partition_1.brep] b
+
+fixshape result b