0031125: BRepMesh_IncrementalMesh crash in constructor for empty compound shape
authoroan <oan@opencascade.com>
Mon, 4 Nov 2019 14:49:07 +0000 (17:49 +0300)
committerbugmaster <bugmaster@opencascade.com>
Wed, 6 Nov 2019 16:17:24 +0000 (19:17 +0300)
Added check for cases of empty shapes producing null models.
NoError status is returned as far as empty compounds are generally coorect shapes.

src/BRepMesh/BRepMesh_IncrementalMesh.cxx
tests/bugs/mesh/bug31125 [new file with mode: 0644]

index 24d3fd3..25627ed 100644 (file)
@@ -108,15 +108,18 @@ void BRepMesh_IncrementalMesh::Perform(const Handle(IMeshTools_Context)& theCont
 
   myStatus = IMeshData_NoError;
   const Handle(IMeshData_Model)& aModel = theContext->GetModel();
-  for (Standard_Integer aFaceIt = 0; aFaceIt < aModel->FacesNb(); ++aFaceIt)
+  if (!aModel.IsNull())
   {
-    const IMeshData::IFaceHandle& aDFace = aModel->GetFace(aFaceIt);
-    myStatus |= aDFace->GetStatusMask();
-
-    for (Standard_Integer aWireIt = 0; aWireIt < aDFace->WiresNb(); ++aWireIt)
+    for (Standard_Integer aFaceIt = 0; aFaceIt < aModel->FacesNb(); ++aFaceIt)
     {
-      const IMeshData::IWireHandle& aDWire = aDFace->GetWire(aWireIt);
-      myStatus |= aDWire->GetStatusMask();
+      const IMeshData::IFaceHandle& aDFace = aModel->GetFace(aFaceIt);
+      myStatus |= aDFace->GetStatusMask();
+
+      for (Standard_Integer aWireIt = 0; aWireIt < aDFace->WiresNb(); ++aWireIt)
+      {
+        const IMeshData::IWireHandle& aDWire = aDFace->GetWire(aWireIt);
+        myStatus |= aDWire->GetStatusMask();
+      }
     }
   }
 
diff --git a/tests/bugs/mesh/bug31125 b/tests/bugs/mesh/bug31125
new file mode 100644 (file)
index 0000000..cbef730
--- /dev/null
@@ -0,0 +1,7 @@
+puts "======="
+puts "0031125: BRepMesh_IncrementalMesh crash in constructor for empty compound shape"
+puts "======="
+puts ""
+
+compound result
+incmesh result 1