From: eap Date: Wed, 10 Oct 2018 14:11:35 +0000 (+0300) Subject: 23594: EDF 17213 : crash of salome when loading SMESH or dumping the study X-Git-Tag: V9_2_0a2~10^2~2 X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=a4be05bc3b1de5753d74501144c3ff1416606a12 23594: EDF 17213 : crash of salome when loading SMESH or dumping the study Attempt 1: in SMESH_Mesh::SortByMeshOrder() assure same size of sortedPos and onlyOrderedList --- diff --git a/src/SMESH/SMESH_Gen.cxx b/src/SMESH/SMESH_Gen.cxx index 574d4b3de..67c3edda9 100644 --- a/src/SMESH/SMESH_Gen.cxx +++ b/src/SMESH/SMESH_Gen.cxx @@ -1032,13 +1032,13 @@ std::vector< std::string > SMESH_Gen::GetPluginXMLPaths() bool fileOK; #ifdef WIN32 #ifdef UNICODE - const wchar_t* path = Kernel_Utils::decode_s(xmlPath); + const wchar_t* path = Kernel_Utils::decode_s(xmlPath); #else - const char* path = xmlPath.c_str(); + const char* path = xmlPath.c_str(); #endif fileOK = (GetFileAttributes(path) != INVALID_FILE_ATTRIBUTES); #ifdef UNICODE - delete path; + delete path; #endif #else fileOK = (access(xmlPath.c_str(), F_OK) == 0); diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index 226800af2..e7acf1db4 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -2431,8 +2431,9 @@ bool SMESH_Mesh::SortByMeshOrder(std::vector& theListToSort) con { TPosInList smPos = find( smBeg, smEnd, smVec[i] ); if ( smPos != smEnd ) { - onlyOrderedList.push_back( smVec[i] ); sortedPos[ distance( smBeg, smPos )] = smPos; + if ( sortedPos.size() > onlyOrderedList.size() ) + onlyOrderedList.push_back( smVec[i] ); } } } diff --git a/src/SMESHUtils/SMESH_Offset.cxx b/src/SMESHUtils/SMESH_Offset.cxx index 564a09f69..faefc439d 100644 --- a/src/SMESHUtils/SMESH_Offset.cxx +++ b/src/SMESHUtils/SMESH_Offset.cxx @@ -2656,6 +2656,11 @@ SMDS_Mesh* SMESH_MeshAlgos::MakeOffset( SMDS_ElemIteratorPtr theFaceIt, TEPairVec& theNew2OldFaces, TNPairVec& theNew2OldNodes) { + if ( theSrcMesh.GetMeshInfo().NbFaces( ORDER_QUADRATIC ) > 0 ) + throw SALOME_Exception( "Offset of quadratic mesh not supported" ); + if ( theSrcMesh.GetMeshInfo().NbFaces() > theSrcMesh.GetMeshInfo().NbTriangles() ) + throw SALOME_Exception( "Offset of non-triangular mesh not supported" ); + SMDS_Mesh* newMesh = new SMDS_Mesh; theNew2OldFaces.clear(); theNew2OldNodes.clear(); @@ -2663,11 +2668,6 @@ SMDS_Mesh* SMESH_MeshAlgos::MakeOffset( SMDS_ElemIteratorPtr theFaceIt, ( std::make_pair(( const SMDS_MeshElement*) 0, ( const SMDS_MeshElement*) 0)); // to have index == face->GetID() - if ( theSrcMesh.GetMeshInfo().NbFaces( ORDER_QUADRATIC ) > 0 ) - throw SALOME_Exception( "Offset of quadratic mesh not supported" ); - if ( theSrcMesh.GetMeshInfo().NbFaces() > theSrcMesh.GetMeshInfo().NbTriangles() ) - throw SALOME_Exception( "Offset of non-triangular mesh not supported" ); - // copy input faces to the newMesh keeping IDs of nodes double minNodeDist = 1e100;