Salome HOME
Fix SIGSEGV in case MG-hexa is used on a mesh without a shape.
authorChristophe Bourcier <christophe.bourcier@cea.fr>
Fri, 27 Nov 2020 17:51:31 +0000 (18:51 +0100)
committerChristophe Bourcier <christophe.bourcier@cea.fr>
Fri, 27 Nov 2020 17:51:31 +0000 (18:51 +0100)
For instance, it failed when meshing a half-cylinder surface mesh (copied to be without shape).

src/HexoticPlugin/HexoticPlugin_Hexotic.cxx

index 8af68a4dede882731728113808f7bb9098e6cdeb..887e868203299c65f360a84dd792bb3c6152b98f 100644 (file)
@@ -455,15 +455,17 @@ static bool readResult(MG_Hexotic_API*       theHexaOutput,
   int ver, dim;
   int meshID = theHexaOutput->GmfOpenMesh( theFile, GmfRead, &ver, &dim );
 
+  int nbVerticesInShape = countShape( theMesh, TopAbs_VERTEX );
   int nbVertices  = getNbShape(theHexaOutput, meshID, GmfVertices );
-  int nbCorners   = getNbShape(theHexaOutput, meshID, GmfCorners, countShape( theMesh, TopAbs_VERTEX ));
+  int nbCorners   = getNbShape(theHexaOutput, meshID, GmfCorners, nbVerticesInShape);
   if ( nbVertices == 0 )
     return false;
 
   tabCorner.resize( nbCorners );
   HexoticNode.resize( nbVertices + 1 );
 
-  if ( nbCorners > 0 )
+  // get the shape vertices if the mesh lies on a shape (and this shape has corners)
+  if ( nbCorners > 0 && nbVerticesInShape > 0 )
     getShape( theMeshDS, TopAbs_VERTEX, tabCorner.data() );
 
   int nbNodes = theHexaOutput->GmfStatKwd( meshID, GmfVertices );