Salome HOME
Regression bugs_00/A3
authoreap <eap@opencascade.com>
Wed, 30 Apr 2014 14:33:20 +0000 (18:33 +0400)
committereap <eap@opencascade.com>
Wed, 30 Apr 2014 14:33:20 +0000 (18:33 +0400)
  More protection from access to a closed study

src/SMESH_I/SMESH_Gen_i.cxx
src/SMESH_I/SMESH_Gen_i_1.cxx

index c9243ad..a42b136 100644 (file)
@@ -658,6 +658,8 @@ void SMESH_Gen_i::setCurrentStudy( SALOMEDS::Study_ptr theStudy,
 SALOMEDS::Study_ptr SMESH_Gen_i::GetCurrentStudy()
 {
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetCurrentStudy: study Id = " << GetCurrentStudyID() );
+  if ( GetCurrentStudyID() < 0 )
+    return SALOMEDS::Study::_nil();
   return SALOMEDS::Study::_duplicate( myCurrentStudy );
 }
 
@@ -1052,13 +1054,18 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMEDorSAUV( const char* theFileNa
   aPythonDump << "([";
 
   if (theStatus == SMESH::DRS_OK) {
-    SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
-    aStudyBuilder->NewCommand();  // There is a transaction
+    SALOMEDS::StudyBuilder_var aStudyBuilder;
+    if ( GetCurrentStudyID() > -1 )
+    {
+      aStudyBuilder = myCurrentStudy->NewBuilder();
+      aStudyBuilder->NewCommand();  // There is a transaction
+    }
     aResult->length( aNames.size() );
     int i = 0;
 
     // Iterate through all meshes and create mesh objects
-    for ( list<string>::iterator it = aNames.begin(); it != aNames.end(); it++ ) {
+    for ( list<string>::iterator it = aNames.begin(); it != aNames.end(); it++ )
+    {
       // Python Dump
       if (i > 0) aPythonDump << ", ";
 
@@ -1091,7 +1098,8 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMEDorSAUV( const char* theFileNa
       aResult[i++] = SMESH::SMESH_Mesh::_duplicate( mesh );
       meshServant->GetImpl().GetMeshDS()->Modified();
     }
-    aStudyBuilder->CommitCommand();
+    if ( !aStudyBuilder->_is_nil() )
+      aStudyBuilder->CommitCommand();
   }
 
   // Update Python script
index f155ae9..6890bcf 100644 (file)
@@ -160,7 +160,7 @@ long SMESH_Gen_i::GetBallElementsGroupsTag()
 bool SMESH_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
 {
   if(MYDEBUG) MESSAGE("CanPublishInStudy - "<<!CORBA::is_nil(myCurrentStudy));
-  if(CORBA::is_nil(myCurrentStudy))
+  if( GetCurrentStudyID() < 0 )
     return false;
   
   SMESH::SMESH_Mesh_var aMesh       = SMESH::SMESH_Mesh::_narrow(theIOR);