0024852: Crash on storage of an Ocaf document in XML file format
authorvro <vro@opencascade.com>
Thu, 17 Apr 2014 11:56:55 +0000 (15:56 +0400)
committerabv <abv@opencascade.com>
Thu, 24 Apr 2014 11:43:36 +0000 (15:43 +0400)
Blanks are removed.
A check is implemented to correct a GUID in case of presence of the blanks.

Test case for issues CR24852

src/CDF/CDF_Application.cxx
src/CDM/CDM_Document.cxx
src/StdResource/XCAF
tests/bugs/caf/bug24852 [new file with mode: 0755]

index 92321d0..8c9e47a 100644 (file)
@@ -481,7 +481,15 @@ Standard_Boolean CDF_Application::FindReaderFromFormat(const TCollection_Extende
   ResourceName+=".RetrievalPlugin";
   
   if(UTL::Find(Resources(),ResourceName))  {
-    thePluginId=UTL::GUID(UTL::Value(Resources(),ResourceName));
+    // Get GUID as a string.
+    TCollection_ExtendedString strPluginId = UTL::Value(Resources(),ResourceName);
+    
+    // If the GUID (as a string) contains blanks, remove them.
+    if (strPluginId.Search(' ') != -1)
+      strPluginId.RemoveAll(' ');
+    
+    // Convert to GUID.
+    thePluginId=UTL::GUID(strPluginId);
     return Standard_True;
   }
   return Standard_False;
index 6c326d9..70bfca2 100644 (file)
@@ -1187,7 +1187,16 @@ void CDM_Document::LoadResources()
     theResourceName+="StoragePlugin";
     TCollection_ExtendedString thePluginId;
     FIND(theDocumentResource,theResourceName,myStoragePluginWasFound,thePluginId);
-    if(myStoragePluginWasFound) myStoragePlugin=UTL::GUID(thePluginId);
+    if(myStoragePluginWasFound)
+    {
+      // Check whether the GUID (as a string) contains blanks before and after the string.
+      // If it is so, remove them.
+      if (thePluginId.Search(' ') != -1)
+        thePluginId.RemoveAll(' ');
+      
+      // Convert to GUID.
+      myStoragePlugin=UTL::GUID(thePluginId);
+    }
     myResourcesAreLoaded=Standard_True;
     
 //    cout << "resource Loaded: " << "Format: " << theFormat << ", FileExtension:" << myFileExtension << ", DataType:" <<  myDataType << ", VersionDataType:" << myVersionDataType << ", Description:" << myDescription << ", Domain:" << myDomain << endl;
index d868901..1a8e4c8 100755 (executable)
@@ -23,8 +23,8 @@ BinXCAF.RetrievalPlugin: a78ff497-a779-11d5-aab4-0050044b1af1
 !                                                                               
 XmlOcaf.Description: Xml Document Version 1.0                                   
 XmlOcaf.FileExtension: xml                                                      
-XmlOcaf.StoragePlugin: 03a56820-8269-11d5-aab2-0050044b1af1                     
-XmlOcaf.RetrievalPlugin: 03a56822-8269-11d5-aab2-0050044b1af1                   
+XmlOcaf.StoragePlugin: 03a56820-8269-11d5-aab2-0050044b1af1
+XmlOcaf.RetrievalPlugin: 03a56822-8269-11d5-aab2-0050044b1af1
 !
 ! standard attributes
 !
diff --git a/tests/bugs/caf/bug24852 b/tests/bugs/caf/bug24852
new file mode 100755 (executable)
index 0000000..06b7fd8
--- /dev/null
@@ -0,0 +1,18 @@
+puts "=========="
+puts "OCC24852"
+puts "=========="
+puts ""
+########################################################
+# Crash on storage of an Ocaf document in XML file format
+########################################################
+
+NewDocument D XmlOcaf
+
+set File ${imagedir}/bug24852_test.xml
+
+if { [catch {set res [SaveAs D ${File}]}] != 0 } {
+  puts "Error : Crash on storage of an Ocaf document in XML file format"
+} else {
+  puts "OK : Storage of an Ocaf document in XML file format is good"
+  file delete ${File}
+}