Bug 336201 - Infinite signal/slot recursion on loading xmi containing sequence diagram
Summary: Infinite signal/slot recursion on loading xmi containing sequence diagram
Status: RESOLVED FIXED
Alias: None
Product: umbrello
Classification: Applications
Component: general (show other bugs)
Version: Git
Platform: unspecified Linux
: NOR crash
Target Milestone: ---
Assignee: Oliver Kellogg
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-06-14 08:30 UTC by Oliver Kellogg
Modified: 2014-06-18 07:22 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In: 4.13.3


Attachments
demo XMI file for which the crash happens (25.86 KB, text/x-xmi)
2014-06-14 08:33 UTC, Oliver Kellogg
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Oliver Kellogg 2014-06-14 08:30:38 UTC
Present on git master HEAD of today; the oldest I've tried it with is git master of 2014-05-07, same problem.

KCrash is not able to produce a backtrace (apparently due to stack overflow) but here's the relevant part of a gdb run:

umbrello(9979) UMLApp::setCurrentView: Changed view to UMLScene: "class diagram" / type="Class" / id="DMwBIoFY89jL" / isOpen=true          
umbrello(9979) UMLScene::loadMessagesFromXMI: tag =  "messagewidget"                                                                       
umbrello(9979) UMLScene::addFloatingTextWidget: "CHdnPVZW9I8Q"  type= "wt_Text" : position ( 0 , 0 ) is out of range
umbrello(9979) UMLScene::loadMessagesFromXMI: tag =  "messagewidget"                                                                       
umbrello(9979) UMLScene::addFloatingTextWidget: "rAa64rmLmxEt"  type= "wt_Text" : position ( 0 , 0 ) is out of range
umbrello(9979) UMLScene::loadMessagesFromXMI: tag =  "messagewidget"
umbrello(9979) UMLScene::addFloatingTextWidget: "EOzvNgiDZd0y"  type= "wt_Text" : position ( 0 , 0 ) is out of range                       
umbrello(9979) UMLScene::loadMessagesFromXMI: tag =  "messagewidget"
umbrello(9979) UMLScene::addFloatingTextWidget: "9BlUsbWZ28E9"  type= "wt_Text" : position ( 0 , 0 ) is out of range                       
umbrello(9979) UMLScene::loadMessagesFromXMI: tag =  "messagewidget"
umbrello(9979) UMLScene::addFloatingTextWidget: "VTfaAlJbFrYh"  type= "wt_Text" : position ( 0 , 0 ) is out of range
umbrello(9979) UMLScene::loadMessagesFromXMI: tag =  "messagewidget"
umbrello(9979) UMLScene::addFloatingTextWidget: "FpcjoESyhtcF"  type= "wt_Text" : position ( 0 , 0 ) is out of range
umbrello(9979) UMLScene::loadMessagesFromXMI: tag =  "messagewidget"
umbrello(9979) UMLScene::addFloatingTextWidget: "NCpuMGm4xpu0"  type= "wt_Text" : position ( 0 , 0 ) is out of range
umbrello(9979) UMLScene::loadMessagesFromXMI: tag =  "messagewidget"
umbrello(9979) UMLScene::addFloatingTextWidget: "0abgq2EH6BjT"  type= "wt_Text" : position ( 0 , 0 ) is out of range
umbrello(9979) WidgetBase::loadFromXMI: Using default font  "Sans Serif,10,-1,0,50,0,0,0,0,0"  for widget with xmi.id  ""
umbrello(9979) WidgetBase::loadFromXMI: Using default font  "Sans Serif,10,-1,0,50,0,0,0,0,0"  for widget with xmi.id  "" 
umbrello(9979) WidgetBase::loadFromXMI: Using default font  "Sans Serif,10,-1,0,50,0,0,0,0,0"  for widget with xmi.id  "" 
umbrello(9979) WidgetBase::loadFromXMI: Using default font  "Sans Serif,10,-1,0,50,0,0,0,0,0"  for widget with xmi.id  "" 
umbrello(9979) WidgetBase::loadFromXMI: Using default font  "Sans Serif,10,-1,0,50,0,0,0,0,0"  for widget with xmi.id  "" 
umbrello(9979) UMLDoc::addView: "gnat1_handling_of_with_clause"  to folder  UMLFolder: localName="Logical View", folderFile="", diagrams=1
umbrello(9979) UMLListView::slotObjectCreated: "Logical View" , type= 801 , id= "Logical View" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Logical View"
umbrello(9979) UMLListView::slotObjectCreated: "Datatypes" , type= 830 , id= "Datatypes" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Datatypes"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "int"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "char"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "bool"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "float"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "double"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "short"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "long"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "unsigned int"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "unsigned short"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "unsigned long"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "string"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Boolean"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Character"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Positive"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Natural"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Integer"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Short_Integer"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Long_Integer"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Long_Float"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Duration"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Gnat1drv"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Frontend"
umbrello(9979) UMLListView::slotObjectCreated: "Call_Frontend" , type= 815 , id= "CHdnPVZW9I8Q" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Call_Frontend"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Par"
umbrello(9979) UMLListView::slotObjectCreated: "Par" , type= 815 , id= "NCpuMGm4xpu0" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Par"
umbrello(9979) UMLListView::slotObjectCreated: "Load" , type= 815 , id= "EOzvNgiDZd0y" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Load"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Ch10"
umbrello(9979) UMLListView::slotObjectCreated: "P_Compilation_Unit" , type= 815 , id= "VTfaAlJbFrYh" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "P_Compilation_Unit"
umbrello(9979) UMLListView::slotObjectCreated: "P_Context_Clause" , type= 815 , id= "FpcjoESyhtcF" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "P_Context_Clause"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Lib.Load"
umbrello(9979) UMLListView::slotObjectCreated: "Load_Main_Source" , type= 815 , id= "rAa64rmLmxEt" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Load_Main_Source"
umbrello(9979) UMLListView::slotObjectCreated: "Load_Unit" , type= 815 , id= "9BlUsbWZ28E9" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Load_Unit"
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Sem"
umbrello(9979) UMLListView::slotObjectCreated: "Semantics" , type= 815 , id= "0abgq2EH6BjT" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Semantics"
umbrello(9979) UMLListView::slotObjectCreated: "Use Case View" , type= 802 , id= "Use Case View" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Use Case View"
umbrello(9979) UMLListView::slotObjectCreated: "Component View" , type= 821 , id= "Component View" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Component View"
umbrello(9979) UMLListView::slotObjectCreated: "Deployment View" , type= 827 , id= "Deployment View" : item already exists.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Deployment View"
umbrello(9979) UMLListView::slotObjectCreated: "Entity Relationship Model" , type= 836 , id= "Entity Relationship Model" : item already exi
sts.
umbrello(9979) UMLScene::slotObjectCreated: scene= "class diagram"  / object= "Entity Relationship Model"

Program received signal SIGSEGV, Segmentation fault.
0xb6945d45 in ?? () from /usr/lib/libQtGui.so.4
(gdb) bt
#0  0xb6945d45 in ?? () from /usr/lib/libQtGui.so.4
#1  0xb6947efe in QTextEngine::itemize() const () from /usr/lib/libQtGui.so.4
#2  0xb694a1b0 in QTextEngine::width(int, int) const () from /usr/lib/libQtGui.so.4
#3  0xb691f0b6 in QFontMetrics::width(QString const&, int) const () from /usr/lib/libQtGui.so.4
#4  0x0822b665 in FloatingTextWidget::minimumSize (this=0x86963f8)
    at /kdesdk/umbrello/umbrello/widgets/floatingtextwidget.cpp:183
#5  0x0822b31e in FloatingTextWidget::setText (this=0x86963f8, t=...)
    at /kdesdk/umbrello/umbrello/widgets/floatingtextwidget.cpp:120
#6  0x0822fe36 in MessageWidget::setMessageText (this=0x8695ee8, ft=0x86963f8)
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:880
#7  0x082307cf in MessageWidget::calculateWidget (this=0x8695ee8)
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:710
#8  0x082320f3 in MessageWidget::slotWidgetMoved (this=0x8695ee8, id="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:730
#9  0x08231372 in MessageWidget::qt_metacall (this=0x8695ee8, _c=QMetaObject::InvokeMetaMethod, _id=<optimized out>, 
    _a=0xbf804938) at /kdesdk/umbrello/build/umbrello/messagewidget.moc:81
#10 0xb719defd in QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/lib/libQtCore.so.4
#11 0xb71acfe8 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#12 0x08244a25 in UMLWidget::sigWidgetMoved (this=0x868e938, _t1="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/build/umbrello/umlwidget.moc:111
#13 0x082375bc in ObjectWidget::moveEvent (this=0x868e938, event=0x0)
    at /kdesdk/umbrello/umbrello/widgets/objectwidget.cpp:305
#14 0x082312bf in MessageWidget::setY (this=0x8698ce8, y=237)
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:158
#15 0x082320eb in MessageWidget::slotWidgetMoved (this=0x8698ce8, id="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:729
#16 0x08231372 in MessageWidget::qt_metacall (this=0x8698ce8, _c=QMetaObject::InvokeMetaMethod, _id=<optimized out>, 
    _a=0xbf804b98) at /kdesdk/umbrello/build/umbrello/messagewidget.moc:81
#17 0xb719defd in QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/lib/libQtCore.so.4
#18 0xb71acfe8 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#19 0x08244a25 in UMLWidget::sigWidgetMoved (this=0x868e938, _t1="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/build/umbrello/umlwidget.moc:111
#20 0x082375bc in ObjectWidget::moveEvent (this=0x868e938, event=0x0)
    at /kdesdk/umbrello/umbrello/widgets/objectwidget.cpp:305
#21 0x082312bf in MessageWidget::setY (this=0x8698ce8, y=237)
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:158
#22 0x082320eb in MessageWidget::slotWidgetMoved (this=0x8698ce8, id="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:729
#23 0x08231372 in MessageWidget::qt_metacall (this=0x8698ce8, _c=QMetaObject::InvokeMetaMethod, _id=<optimized out>, 
    _a=0xbf804df8) at /kdesdk/umbrello/build/umbrello/messagewidget.moc:81
#24 0xb719defd in QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/lib/libQtCore.so.4
#25 0xb71acfe8 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#26 0x08244a25 in UMLWidget::sigWidgetMoved (this=0x868e938, _t1="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/build/umbrello/umlwidget.moc:111
#27 0x082375bc in ObjectWidget::moveEvent (this=0x868e938, event=0x0)
    at /kdesdk/umbrello/umbrello/widgets/objectwidget.cpp:305
#28 0x082312bf in MessageWidget::setY (this=0x8698ce8, y=237)
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:158
#29 0x082320eb in MessageWidget::slotWidgetMoved (this=0x8698ce8, id="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:729
#30 0x08231372 in MessageWidget::qt_metacall (this=0x8698ce8, _c=QMetaObject::InvokeMetaMethod, _id=<optimized out>, 
    _a=0xbf805058) at /kdesdk/umbrello/build/umbrello/messagewidget.moc:81
#31 0xb719defd in QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/lib/libQtCore.so.4
#32 0xb71acfe8 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#33 0x08244a25 in UMLWidget::sigWidgetMoved (this=0x868e938, _t1="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/build/umbrello/umlwidget.moc:111
#34 0x082375bc in ObjectWidget::moveEvent (this=0x868e938, event=0x0)
    at /kdesdk/umbrello/umbrello/widgets/objectwidget.cpp:305
#35 0x082312bf in MessageWidget::setY (this=0x8698ce8, y=237)
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:158
#36 0x082320eb in MessageWidget::slotWidgetMoved (this=0x8698ce8, id="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:729
#37 0x08231372 in MessageWidget::qt_metacall (this=0x8698ce8, _c=QMetaObject::InvokeMetaMethod, _id=<optimized out>, 
    _a=0xbf8052b8) at /kdesdk/umbrello/build/umbrello/messagewidget.moc:81
#38 0xb719defd in QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/lib/libQtCore.so.4
#39 0xb71acfe8 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#40 0x08244a25 in UMLWidget::sigWidgetMoved (this=0x868e938, _t1="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/build/umbrello/umlwidget.moc:111
#41 0x082375bc in ObjectWidget::moveEvent (this=0x868e938, event=0x0)
    at /kdesdk/umbrello/umbrello/widgets/objectwidget.cpp:305
#42 0x082312bf in MessageWidget::setY (this=0x8698ce8, y=237)
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:158
#43 0x082320eb in MessageWidget::slotWidgetMoved (this=0x8698ce8, id="7xVVq7gC8ZOl")
    at /kdesdk/umbrello/umbrello/widgets/messagewidget.cpp:729
#44 0x08231372 in MessageWidget::qt_metacall (this=0x8698ce8, _c=QMetaObject::InvokeMetaMethod, _id=<optimized out>, 
    _a=0xbf805518) at /kdesdk/umbrello/build/umbrello/messagewidget.moc:81


Reproducible: Always

Steps to Reproduce:
1. Start recent umbrello built from git.
2. Load an XMI file of your choice containing a sequence diagram (IMHO any ol' file will do.)
3. Witness segfault.
Comment 1 Oliver Kellogg 2014-06-14 08:33:17 UTC
Created attachment 87177 [details]
demo XMI file for which the crash happens
Comment 2 Oliver Kellogg 2014-06-14 08:40:02 UTC
Git commit 7e997587b65c1e52530ffba6c2655a54cfbab40e by Oliver Kellogg.
Committed on 14/06/2014 at 08:40.
Pushed by okellogg into branch 'master'.

umbrello/widgets/messagewidget.cpp
- In function setY() do not emit sigMessageMoved() if
  UMLApp::app()->document()->loading()

umbrello/widgets/objectwidget.cpp
- In function setY() do not moveEvent(0) if
  UMLApp::app()->document()->loading()

M  +1    -1    umbrello/widgets/messagewidget.cpp
M  +2    -1    umbrello/widgets/objectwidget.cpp

http://commits.kde.org/umbrello/7e997587b65c1e52530ffba6c2655a54cfbab40e
Comment 3 Oliver Kellogg 2014-06-16 20:10:22 UTC
Git commit 1d99c6a3243d129109cc511bd6d323c237175e45 by Oliver Kellogg.
Committed on 14/06/2014 at 08:40.
Pushed by okellogg into branch 'KDE/4.13'.

umbrello/widgets/messagewidget.cpp
- In function setY() do not emit sigMessageMoved() if
  UMLApp::app()->document()->loading()

umbrello/widgets/objectwidget.cpp
- In function setY() do not moveEvent(0) if
  UMLApp::app()->document()->loading()

M  +1    -1    umbrello/widgets/messagewidget.cpp
M  +2    -1    umbrello/widgets/objectwidget.cpp

http://commits.kde.org/umbrello/1d99c6a3243d129109cc511bd6d323c237175e45