[Uml-devel] kdesdk/umbrello/umbrello

Jonathan Riddell jri at jriddell.org
Tue Nov 4 13:02:13 UTC 2003


CVS commit by jriddell: 

Add check to UMLDoc::saveToXMI to prevent crash when objectList
contains strange values.  Next challenge is to find out why objectList
contains strange values.


  M +17 -6     umldoc.cpp   1.95


--- kdesdk/umbrello/umbrello/umldoc.cpp  #1.94:1.95
@@ -566,12 +566,10 @@ QString	UMLDoc::uniqObjectName(const UML
   *   AddUMLObjectPaste if pasting.
   */
-void UMLDoc::addUMLObject( UMLObject * object )
-{
+void UMLDoc::addUMLObject(UMLObject* object) {
         objectList.append( object );
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 // a simple removeal of an object
-void UMLDoc::slotRemoveUMLObject( UMLObject * object )
-{
+void UMLDoc::slotRemoveUMLObject(UMLObject* object)  {
         objectList.remove(object);
 }
@@ -1221,6 +1220,6 @@ void UMLDoc::removeUMLObject(UMLObject *
                         pClass->removeTemplate((UMLTemplate*)o);
         }
-        setModified(true);
 
+        setModified(true);
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1358,8 +1358,18 @@ bool UMLDoc::saveToXMI(QIODevice& file) 
                 if (t == ot_Attribute || t == ot_Operation || t == ot_Association)
                         continue;
-                if (! o->saveToXMI(doc, objectsElement))
+                if (t != ot_Actor && t != ot_UseCase && t != ot_Interface && t != ot_Datatype
+                    && t != ot_Enum && t != ot_Class && t != ot_EnumLiteral && t != ot_Template
+                    && t != ot_Component && t != ot_Artifact && t != ot_Node
+                    && t != ot_Stereotype) {
+                        kdWarning() << "UMLDoc::saveToXMI() trying to save a non-existant object from objectList"
+                                    << endl;
+                        continue;
+                }
+                if (! o->saveToXMI(doc, objectsElement))  {
                         status = false;
         }
 
+        }
+
         // Save the UMLAssociations.
         // These are saved last so that upon loading, an association's role






More information about the umbrello-devel mailing list