[Uml-devel] KDE/kdesdk/umbrello/umbrello

Ralf Habacker ralf.habacker at gmail.com
Thu Jan 19 15:29:55 UTC 2012


SVN commit 1274699 by habacker:

Made xmi loading more robust by adding guards to prevent cycles in uml objects.

There are still problems with cycles in UMLListViewItem::deepcopy(), which will be
addressed in an additional patch.

CCBUG: 230350

 M  +5 -0      package.cpp  
 M  +12 -1     umlobject.cpp  
 M  +1 -1      umlobject.h  


--- trunk/KDE/kdesdk/umbrello/umbrello/package.cpp #1274698:1274699
@@ -133,6 +133,11 @@
         uError() << "is called with a NULL object";
         return false;
     }
+    if (pObject == this) {
+        uError() << "adding myself as child is not allowed";
+        return false;
+    }
+
     if (m_objects.indexOf(pObject) != -1) {
         uDebug() << pObject->name() << " is already there";
         return false;
--- trunk/KDE/kdesdk/umbrello/umbrello/umlobject.cpp #1274698:1274699
@@ -530,10 +530,21 @@
  *
  * @param pPkg   Pointer to the class' UMLPackage.
  */
-void UMLObject::setUMLPackage(UMLPackage* pPkg)
+bool UMLObject::setUMLPackage(UMLPackage* pPkg)
 {
+    if (pPkg == this) {
+        uDebug() << "setting parent to myself is not allowed";
+        return false;
+    }
+
+    if (pPkg->umlPackage() == this) {
+        uDebug() << "setting parent to an object of which I'm already the parent is not allowed";
+        return false;
+    }
+
     m_pUMLPackage = pPkg;
     emitModified();
+    return true;
 }
 
 /**
--- trunk/KDE/kdesdk/umbrello/umbrello/umlobject.h #1274698:1274699
@@ -112,7 +112,7 @@
     QString package(const QString& separator = QString(),
                     bool includeRoot = false);
 
-    void setUMLPackage(UMLPackage* pPkg);
+    bool setUMLPackage(UMLPackage* pPkg);
     UMLPackage* umlPackage();
 
     UMLPackageList packages(bool includeRoot = false) const;




More information about the umbrello-devel mailing list