0023799: Crash on copying a label
authorbugmaster <bugmaster@opencascade.com>
Mon, 1 Apr 2013 07:47:08 +0000 (11:47 +0400)
committervro <vro@opencascade.com>
Mon, 1 Apr 2013 07:48:54 +0000 (11:48 +0400)
A check on NULL is added to prevent the crash.
Adding test case for this fix

src/TDF/TDF_CopyLabel.cxx
src/TDF/TDF_Tool.cxx
tests/bugs/caf/bug23799 [new file with mode: 0755]
tests/bugs/moddata_1/bug22623

index 745e7e1..824f788 100755 (executable)
@@ -97,13 +97,16 @@ void TDF_CopyLabel::ExternalReferences(const TDF_Label& aRefLabel, const TDF_Lab
 
 //       TDF_Tool::Entry(att->Label(), entr1);  
 //       cout<<"\t\tReferences attribute dynamic type = "<<att->DynamicType()<<" Label = "<<entr1 <<endl;
-      if (aFilter.IsKept(att) && att->Label().IsDifferent(aRefLabel) &&
-         !att->Label().IsDescendant(aRefLabel)) {
-       aExternals.Add(att);
-       extRefFound = Standard_True;
+      if (!att.IsNull() && !att->Label().IsNull())
+      {
+        if (aFilter.IsKept(att) && att->Label().IsDifferent(aRefLabel) &&
+           !att->Label().IsDescendant(aRefLabel)) {
+          aExternals.Add(att);
+         extRefFound = Standard_True;
+        }
       }
     }
-
+    
 //     const TDF_LabelMap& labMap = ds->Labels();
 //     for (TDF_MapIteratorOfLabelMap labMItr(labMap);labMItr.More(); labMItr.Next()) {
 //       TDF_Tool::Entry(labMItr.Key(), entr1);  
index bc78cd5..740d563 100755 (executable)
@@ -181,9 +181,12 @@ static Standard_Boolean TDF_Tool_DescendantRef
        // CLE
        // const Handle(TDF_Attribute)& att = attMItr.Key();
        Handle(TDF_Attribute) att = attMItr.Key();
-       // ENDCLE
-       if (aFilter.IsKept(att) && !att->Label().IsDescendant(aRefLabel))
-         return Standard_False;
+        if (!att.IsNull() && !att->Label().IsNull())
+        {
+         // ENDCLE
+         if (aFilter.IsKept(att) && !att->Label().IsDescendant(aRefLabel))
+           return Standard_False;
+        }
       }
       ds->Clear();
     }
diff --git a/tests/bugs/caf/bug23799 b/tests/bugs/caf/bug23799
new file mode 100755 (executable)
index 0000000..4da857e
--- /dev/null
@@ -0,0 +1,25 @@
+puts "============"
+puts "OCC23799"
+puts "============"
+puts ""
+#######################################################################
+# Crash on copying a label
+#######################################################################
+
+set BugNumber OCC23799
+
+# Create a new document
+NewDocument D
+
+psphere s 100
+explode s f
+
+ImportShape D 0:1 s
+SelectShape D 0:2 s_1 s
+ForgetAll D 0:1
+
+if { [catch [CopyLabel D 0:2 0:3] ] != 0 } {
+  puts "${BugNumber}: Error copy label"
+} else {
+  puts "${BugNumber}: OK"
+}
index f75dcca..0c28310 100755 (executable)
@@ -1,5 +1,6 @@
 puts "TODO ?#22623 ALL: \\*\\* Exception"
 puts "TODO ?#22623 ALL: An exception was caught"
+puts "TODO ?#22623 ALL: TEST INCOMPLETE"
 
 puts "============"
 puts "OCC22623"