Bug 338536 - Crash when attempting to view model from AIXM
Summary: Crash when attempting to view model from AIXM
Status: RESOLVED FIXED
Alias: None
Product: umbrello
Classification: Applications
Component: general (show other bugs)
Version: 2.13.2
Platform: Ubuntu Linux
: NOR crash
Target Milestone: ---
Assignee: Umbrello Development Group
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-08-25 04:40 UTC by M Hounsell at ACFR
Modified: 2014-08-28 05:55 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In: 4.14.1


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description M Hounsell at ACFR 2014-08-25 04:40:44 UTC
Maybe Related to 81364 Import Rose model files

Open file from AXIM then click on AIXM node then SEGV

Ubuntu 14.04 LTS

Umbrello UML Modeller
Version 2.13.3
Using KDE Development Platform 4.13.3

Source Model http://www.aixm.aero/gallery/content/public/AIXM51/AIXM-5-1-20100201-uml.zip

(object Petal
    version     50
    _written    "Rose 2006.0.0.060314"
    charSet     0)
Comment 1 M Hounsell at ACFR 2014-08-25 05:01:12 UTC
#0  QGraphicsView::scene(this = 0x0) at graphicsview/qgraphicsview.cpp:1592
#1  UMLView::umlScene(this = <optimised out>) at ../../umbrello/umlview.cpp:60
#2  UMLListView::mousePressEvent(this = 0xfe0180, me = 0x7fffffffbf60) at ../../umbrello/umllistview.cpp:195
#3  QWidget::event(this = 0xfe0180, this@entry = 0xfe0180, event = 0x7fffffffbf60, event@entry = 0x7fffffffbf60) at kernel/qwidget.cpp:8372
#4  QFrame::event(this = 0xfe0180, e = 0x7fffffffbf60) at widgets/qframe.cpp:557
#5  QAbstractItemView::viewportEvent(this = 0xfe0180, this@entry = 0xfe0180, event = 0x7fffffffbf60, event@entry = 0x7fffffffbf60) at itemviews/qabstractitemview.cpp:1644
#6  QTreeView::viewportEvent(this = 0xfe0180, event = 0x7fffffffbf60) at itemviews/qtreeview.cpp:1252
#7  QCoreApplicationPrivate::sendThroughObjectEventFilters(this = 0xa00600, this@entry = 0xa00600, receiver = 0xfdfe40, receiver@entry = 0xfdfe40, event = 0x7fffffffbf60, event@entry = 0x7fffffffbf60) at kernel/qcoreapplication.cpp:1063
#8  QApplicationPrivate::notify_helper(this = 0xa00600, this@entry = 0xa00600, receiver = 0xfdfe40, receiver@entry = 0xfdfe40, e = 0x7fffffffbf60, e@entry = 0x7fffffffbf60) at kernel/qapplication.cpp:4563
#9  QApplication::notify(this = 0x7fffffffe3e0, this@entry = 0x7fffffffe3e0, receiver = 0xfdfe40, receiver@entry = 0xfdfe40, e = 0x7fffffffbf60, e@entry = 0x7fffffffbf60) at kernel/qapplication.cpp:4110
#10  KApplication::notify(this = 0x7fffffffe3e0, receiver = 0xfdfe40, event = 0x7fffffffbf60) at ../../kdeui/kernel/kapplication.cpp:311
#11  QCoreApplication::notifyInternal(this = 0x7fffffffe3e0, receiver = 0xfdfe40, receiver@entry = 0xfdfe40, event = 0x7fffffffbf60, event@entry = 0x7fffffffbf60) at kernel/qcoreapplication.cpp:953
#12  sendEvent(event = <optimised out>, receiver = <optimised out>) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:231
#13  QApplicationPrivate::sendMouseEvent(receiver = 0xfdfe40, receiver@entry = 0xfdfe40, event = 0x7fffffffbf60, event@entry = 0x7fffffffbf60, alienWidget = 0xfdfe40, alienWidget@entry = 0xfdfe40, nativeWidget = 0xfd9370, nativeWidget@entry = 0xfd9370, buttonDown = 0x7ffff5c5b318 <qt_button_down>, buttonDown@entry = 0x7ffff5c5b318 <qt_button_down>, lastMouseReceiver = , spontaneous = true, spontaneous@entry = true) at kernel/qapplication.cpp:3178
#14  QETWidget::translateMouseEvent(this = 0xfd9370, this@entry = 0xfd9370, event = 0x7fffffffc2e0, event@entry = 0x7fffffffc2e0) at kernel/qapplication_x11.cpp:4634
#15  QApplication::x11ProcessEvent(this = 0x7fffffffe3e0, event = 0x7fffffffc2e0, event@entry = 0x7fffffffc2e0) at kernel/qapplication_x11.cpp:3627
#16  x11EventSourceDispatch(s = 0xa012b0, callback = 0x0, user_data = 0x0) at kernel/qguieventdispatcher_glib.cpp:146
#17  g_main_context_dispatch() at :0
#18  ??() at :0
#19  g_main_context_iteration() at :0
#20  QEventDispatcherGlib::processEvents(this = 0x9ce8d0, flags = ) at kernel/qeventdispatcher_glib.cpp:434
#21  QGuiEventDispatcherGlib::processEvents(this = <optimised out>, flags = <optimised out>) at kernel/qguieventdispatcher_glib.cpp:204
#22  QCoreApplication::processEvents(flags = ) at kernel/qcoreapplication.cpp:1140
#23  Object_Factory::createNewUMLObject(type = UMLObject::ot_Class, type@entry = UMLObject::ot_Class, name = , parentPkg = 0x4267ec0, parentPkg@entry = 0x4267ec0) at ../../umbrello/object_factory.cpp:151
#24  Object_Factory::createUMLObject(type = UMLObject::ot_Class, type@entry = UMLObject::ot_Class, n = , parentPkg = 0x4267ec0, solicitNewName = <optimised out>) at ../../umbrello/object_factory.cpp:193
#25  Import_Rose::umbrellify(node = 0x190d280, parentPkg = 0x4267ec0, parentPkg@entry = 0x4267ec0) at ../../umbrello/petaltree2uml.cpp:589

/**
 * Getter for the scene.
 * TODO: Should be removed. Use scene() instead.
 */
UMLScene* UMLView::umlScene() const
{
    return static_cast<UMLScene*>(scene());
}

segv QGraphicsView::scene
Comment 2 Oliver Kellogg 2014-08-25 05:45:03 UTC
On 2.14.0 and master, the backtrace is different:

[...]
umbrello(10522) UMLApp::executeCommand: "Set stereotype :  to feature"  [ 1616 ]
umbrello(10522) UMLPackage::addObject: "AirportHeliportProtectionArea"  is already there
umbrello(10522) UMLApp::executeCommand: "Create UML object : AIXM::AIXM Features::AirportHeliport::Airport/Heliport::AirportHeliportCollocation"  [ 1617 ]
umbrello(10522) UMLApp::executeCommand: "Set stereotype :  to feature"  [ 1618 ]
umbrello(10522) UMLPackage::addObject: "AirportHeliportCollocation"  is already there
umbrello(10522) UMLApp::executeCommand: "Set stereotype :  to feature"  [ 1619 ]
umbrello(10522) UMLApp::executeCommand: "Create UML object : AIXM::AIXM Features::AirportHeliport::Airport/Heliport::AltimeterSource"  [ 1620 ]

Program received signal SIGSEGV, Segmentation fault.
0x083227b1 in UMLCanvasObject::findChildObjectById (this=0xa50b6c8, id="47965BE30126", considerAncestors=false)
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/umlcanvasobject.cpp:270
270         for (UMLObjectListIt oit(m_List); oit.hasNext();) {
(gdb) bt
#0  0x083227b1 in UMLCanvasObject::findChildObjectById (this=0xa50b6c8, id="47965BE30126", considerAncestors=false)
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/umlcanvasobject.cpp:270
#1  0x082c132c in UMLClassifier::findChildObjectById (this=0xa50b6c8, id="47965BE30126", considerAncestors=false)
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/classifier.cpp:558
#2  0x082f3682 in Model_Utils::findObjectInList (id="47965BE30126", inList=...)
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/model_utils.cpp:101
#3  0x08300d38 in UMLPackage::findObjectById (this=0xa509c28, id="47965BE30126")
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/package.cpp:264
#4  0x082f362a in Model_Utils::findObjectInList (id="47965BE30126", inList=...)
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/model_utils.cpp:93
#5  0x08300d38 in UMLPackage::findObjectById (this=0xaa76238, id="47965BE30126")
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/package.cpp:264
#6  0x082f362a in Model_Utils::findObjectInList (id="47965BE30126", inList=...)
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/model_utils.cpp:93
#7  0x08300d38 in UMLPackage::findObjectById (this=0xad25658, id="47965BE30126")
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/package.cpp:264
#8  0x082f362a in Model_Utils::findObjectInList (id="47965BE30126", inList=...)
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/model_utils.cpp:93
#9  0x08300d38 in UMLPackage::findObjectById (this=0xaa76238, id="47965BE30126")
    at /home/kellogg/tools/kdesdk/umbrello/umbrello/package.cpp:264
... backtrace continues flipping back and forth between
    model_utils.cpp:93 and package.cpp:264
Comment 3 Oliver Kellogg 2014-08-26 07:44:52 UTC
Analysis:

AIXM-5-1-20100201.mdl has packages which contain a class of the same name as the package (AirportHeliport, Runway, Taxiway, Apron, Surface, Airspace, Meteorology, Service, Point, Procedure, Minima, RulesProcedures).

Object_Factory::createUMLObject() behaves incorrectly in this case:
Instead of creating the nested class of the same name, it returns the existing package object.
Comment 4 Oliver Kellogg 2014-08-26 08:29:00 UTC
Git commit 79bb78d801097b7515e3cc7f43174fcb7528266e by Oliver Kellogg.
Committed on 26/08/2014 at 08:30.
Pushed by okellogg into branch 'master'.

Fix crash loading AIXM-5-1-20100201.mdl according to analysis at comment #3:

umbrello/object_factory.cpp
- In function createUMLObject() case !n.isEmpty(), if doc->findUMLObject()
  returns non NULL and solicitNewName is false then:
  - If `type' is ot_UMLObject (wildcard) or `type' is equal to o->baseType()
    then return the existing object.
  - Else log a message about type mismatch and call createNewUMLObject() for
    the given `type'.

M  +11   -1    umbrello/object_factory.cpp

http://commits.kde.org/umbrello/79bb78d801097b7515e3cc7f43174fcb7528266e
Comment 5 Oliver Kellogg 2014-08-26 16:38:16 UTC
To my surprise, on retrying I get another crash:

[...]
umbrello(19239) UMLDoc::createDiagram: folder= "Airport/Heliport"  / type= "Class"  / name= "2 - AirportHeliport Associations"
umbrello(19239) UMLDoc::addView: "2 - AirportHeliport Associations"  to folder  UMLFolder: localName="", folderFile="", diagrams=0
umbrello(19239) UMLDoc::changeCurrentView: id= "44D7564800C7"
umbrello(19239) UMLDoc::changeCurrentView: New current view was not found with id= "44D7564800C7" ! 

Program received signal SIGSEGV, Segmentation fault.
0x080d515f in QList<UMLObject*>::QList (this=0xbf800068, l=...) at /usr/include/QtCore/qlist.h:114
114         inline QList(const QList<T> &l) : d(l.d) { d->ref.ref(); if (!d->sharable) detach_helper(); }
(gdb) 
(gdb) bt
#0  0x080d515f in QList<UMLObject*>::QList (this=0xbf800068, l=...) at /usr/include/QtCore/qlist.h:114
#1  0x080de9ac in QListIterator<UMLObject*>::QListIterator (this=0xbf800068, container=...) at /usr/include/QtCore/qlist.h:777
#2  0x0832284e in UMLCanvasObject::findChildObjectById (this=0xa922fa8, id="43B1741A0D3B", considerAncestors=false)
    at /kdesdk/umbrello/umbrello/umlcanvasobject.cpp:270
#3  0x082c12ac in UMLClassifier::findChildObjectById (this=0xa922fa8, id="43B1741A0D3B", considerAncestors=false)
    at /kdesdk/umbrello/umbrello/classifier.cpp:558
#4  0x082f3602 in Model_Utils::findObjectInList (id="43B1741A0D3B", inList=...)
    at /kdesdk/umbrello/umbrello/model_utils.cpp:101
#5  0x08300dd2 in UMLPackage::findObjectById (this=0xa9f4628, id="43B1741A0D3B")
    at /kdesdk/umbrello/umbrello/package.cpp:268
#6  0x082f35aa in Model_Utils::findObjectInList (id="43B1741A0D3B", inList=...)
    at /kdesdk/umbrello/umbrello/model_utils.cpp:93
#7  0x08300dd2 in UMLPackage::findObjectById (this=0xa4ff280, id="43B1741A0D3B")
    at /kdesdk/umbrello/umbrello/package.cpp:268
#8  0x082f35aa in Model_Utils::findObjectInList (id="43B1741A0D3B", inList=...)
    at /kdesdk/umbrello/umbrello/model_utils.cpp:93
#9  0x08300dd2 in UMLPackage::findObjectById (this=0xacaa3e8, id="43B1741A0D3B")
    at /kdesdk/umbrello/umbrello/package.cpp:268
Comment 6 Oliver Kellogg 2014-08-26 18:47:59 UTC
Git commit 22c37e1c3f5628663d3b08fdc53cb6486dfafb84 by Oliver Kellogg.
Committed on 26/08/2014 at 18:48.
Pushed by okellogg into branch 'master'.

Address http://bugs.kde.org/show_bug.cgi?id=338536#c5

umbrello/model_utils.cpp function findUMLObject()
- In the for-loop over `pkg' initial part, do not enter into tests of `name'
  against pkg->name() if `type' does not match pkg->baseType().

My current testing shows that this appears to fix the problem.
However, I will wait with setting the bug to RESOLVED until more testing is
done. If somebody can confirm that it works, that would be helpful.

M  +4    -1    umbrello/model_utils.cpp

http://commits.kde.org/umbrello/22c37e1c3f5628663d3b08fdc53cb6486dfafb84
Comment 7 Oliver Kellogg 2014-08-28 05:55:02 UTC
Git commit b8e138c8d708afc50a2a627ee9b80076c347b70d by Oliver Kellogg.
Committed on 28/08/2014 at 05:51.
Pushed by okellogg into branch 'KDE/4.14'.

Merge remote branch 'origin/master' into KDE/4.14

Mathew Hounsell confirmed that commit 22c37e1 fixes the bug 338536.
FIXED-IN: 4.14.1


http://commits.kde.org/umbrello/b8e138c8d708afc50a2a627ee9b80076c347b70d