Bug 268469 - Umbrello crashed when changing the Package of a class
Summary: Umbrello crashed when changing the Package of a class
Status: RESOLVED FIXED
Alias: None
Product: umbrello
Classification: Unclassified
Component: general (show other bugs)
Version: unspecified
Platform: Ubuntu Packages Linux
: NOR crash (vote)
Target Milestone: ---
Assignee: Umbrello Development Group
URL:
Keywords:
: 188300 242142 273594 298728 (view as bug list)
Depends on:
Blocks:
 
Reported: 2011-03-14 15:29 UTC by Marco CInus
Modified: 2014-04-29 12:04 UTC (History)
7 users (show)

See Also:
Latest Commit:
Version Fixed In: 4.9.0


Attachments
New crash information added by DrKonqi (8.59 KB, text/plain)
2011-09-05 13:15 UTC, underline
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Marco CInus 2011-03-14 15:29:19 UTC
Application: umbrello (2.4.5)
KDE Platform Version: 4.4.5 (KDE 4.4.5)
Qt Version: 4.6.2
Operating System: Linux 2.6.32-30-generic x86_64
Distribution: Ubuntu 10.04.2 LTS

-- Information about the crash:
Changing the package name of a class from the dialog window (Properties) of a class causes a crash of Umbrello

The crash can be reproduced every time.

 -- Backtrace:
Application: Umbrello UML Modeller (umbrello), signal: Segmentation fault
[KCrash Handler]
#5  0x0000000000f283f0 in vtable for __cxxabiv1::__class_type_info ()
#6  0x0000000000bc5361 in UMLListView::popupMenuSel (this=0x3314630, action=<value optimized out>) at ../../../umbrello/umbrello/umllistview.cpp:590
#7  0x0000000000bc5ebf in UMLListView::qt_metacall (this=0x3314630, _c=QMetaObject::InvokeMetaMethod, _id=<value optimized out>, _a=0x7fff7b737380) at ./umllistview.moc:111
#8  0x00007fcd0eb8ee3f in QMetaObject::activate (sender=0x34a8510, m=<value optimized out>, local_signal_index=<value optimized out>, argv=0x27710) at kernel/qobject.cpp:3293
#9  0x00007fcd0f489002 in QMenu::triggered (this=0x3a26570, _t1=0x3317760) at .moc/release-shared/moc_qmenu.cpp:164
#10 0x00007fcd0f48b65d in QMenuPrivate::_q_actionTriggered (this=<value optimized out>) at widgets/qmenu.cpp:1129
#11 0x00007fcd0f48f542 in QMenu::qt_metacall (this=0x34a8510, _c=QMetaObject::InvokeMetaMethod, _id=<value optimized out>, _a=0x7fff7b737580) at .moc/release-shared/moc_qmenu.cpp:105
#12 0x00007fcd10534ca0 in KMenu::qt_metacall (this=0x3a26570, _c=QMetaObject::InvokeMetaMethod, _id=56032176, _a=0x27710) at ./kmenu.moc:76
#13 0x00007fcd0eb8ee3f in QMetaObject::activate (sender=0x3317760, m=<value optimized out>, local_signal_index=<value optimized out>, argv=0x27710) at kernel/qobject.cpp:3293
#14 0x00007fcd0f049032 in QAction::triggered (this=0x3a26570, _t1=false) at .moc/release-shared/moc_qaction.cpp:263
#15 0x00007fcd0f04b0ab in QAction::activate (this=0x3317760, event=<value optimized out>) at kernel/qaction.cpp:1255
#16 0x00007fcd0f48a39d in QMenuPrivate::activateCausedStack (this=<value optimized out>, causedStack=..., action=0x3317760, action_e=QAction::Trigger, self=true) at widgets/qmenu.cpp:1011
#17 0x00007fcd0f48fdda in QMenuPrivate::activateAction (this=0x352a290, action=0x3317760, action_e=QAction::Trigger, self=<value optimized out>) at widgets/qmenu.cpp:1103
#18 0x00007fcd1053348e in KMenu::mouseReleaseEvent (this=0x34a8510, e=0x0) at ../../kdeui/widgets/kmenu.cpp:471
#19 0x00007fcd0f0a5582 in QWidget::event (this=0x34a8510, event=0x7fff7b7381d0) at kernel/qwidget.cpp:7998
#20 0x00007fcd0f491f9b in QMenu::event (this=0x34a8510, e=0x7fff7b7381d0) at widgets/qmenu.cpp:2414
#21 0x00007fcd0f04f22c in QApplicationPrivate::notify_helper (this=0x2edd230, receiver=0x34a8510, e=0x7fff7b7381d0) at kernel/qapplication.cpp:4300
#22 0x00007fcd0f055ecb in QApplication::notify (this=0x7fff7b738ee0, receiver=0x34a8510, e=0x7fff7b7381d0) at kernel/qapplication.cpp:3865
#23 0x00007fcd10456a16 in KApplication::notify (this=0x7fff7b738ee0, receiver=0x34a8510, event=0x7fff7b7381d0) at ../../kdeui/kernel/kapplication.cpp:302
#24 0x00007fcd0eb7c06c in QCoreApplication::notifyInternal (this=0x7fff7b738ee0, receiver=0x34a8510, event=0x7fff7b7381d0) at kernel/qcoreapplication.cpp:704
#25 0x00007fcd0f0550ae in QCoreApplication::sendEvent (receiver=0x34a8510, event=0x7fff7b7381d0, alienWidget=0x0, nativeWidget=0x34a8510, buttonDown=<value optimized out>, 
    lastMouseReceiver=<value optimized out>, spontaneous=true) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:215
#26 QApplicationPrivate::sendMouseEvent (receiver=0x34a8510, event=0x7fff7b7381d0, alienWidget=0x0, nativeWidget=0x34a8510, buttonDown=<value optimized out>, lastMouseReceiver=<value optimized out>, 
    spontaneous=true) at kernel/qapplication.cpp:2965
#27 0x00007fcd0f0d53dd in QETWidget::translateMouseEvent (this=0x34a8510, event=<value optimized out>) at kernel/qapplication_x11.cpp:4302
#28 0x00007fcd0f0d38ac in QApplication::x11ProcessEvent (this=<value optimized out>, event=0x7fff7b738af0) at kernel/qapplication_x11.cpp:3501
#29 0x00007fcd0f0ff882 in x11EventSourceDispatch (s=0x2ee0ff0, callback=<value optimized out>, user_data=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:146
#30 0x00007fcd0a3cc8c2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#31 0x00007fcd0a3d0748 in ?? () from /lib/libglib-2.0.so.0
#32 0x00007fcd0a3d08fc in g_main_context_iteration () from /lib/libglib-2.0.so.0
#33 0x00007fcd0eba5513 in QEventDispatcherGlib::processEvents (this=0x2eb57c0, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:412
#34 0x00007fcd0f0ff46e in QGuiEventDispatcherGlib::processEvents (this=0x3a26570, flags=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:204
#35 0x00007fcd0eb7a992 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149
#36 0x00007fcd0eb7ad6c in QEventLoop::exec (this=0x7fff7b738e20, flags=) at kernel/qeventloop.cpp:201
#37 0x00007fcd0eb7eaab in QCoreApplication::exec () at kernel/qcoreapplication.cpp:981
#38 0x0000000000b6c6c5 in main (argc=<value optimized out>, argv=<value optimized out>) at ../../../umbrello/umbrello/main.cpp:111

Reported using DrKonqi
Comment 1 Martin Kampas 2011-08-23 14:13:32 UTC
Duplicate of bug 242142?
Comment 2 underline 2011-09-05 13:15:22 UTC
Created attachment 63399 [details]
New crash information added by DrKonqi

umbrello (2.6.2) on KDE Platform 4.6.2 (4.6.2) using Qt 4.7.2

- What I was doing when the application crashed:
1. Clicked on a class which was not on the diagram but in the UML Model tree view. 
2. Opened its properties dialog with right-click.
3. Copied and pasted the package name for the class. It was empty before.
4. Clicked OK.
5. Application crashed.

-- Backtrace (Reduced):
#8  0x083abf94 in UMLListView::popupMenuSel (this=0x929a520, action=0x939c030) at ../../../umbrello/umbrello/umllistview.cpp:589
#9  0x083b3a7c in UMLListView::qt_metacall (this=0x929a520, _c=QMetaObject::InvokeMetaMethod, _id=9, _a=0xbf9ace78) at ./umllistview.moc:111
[...]
#12 0x01759083 in QMenu::triggered (this=0x93a27f8, _t1=0x939c030) at .moc/release-shared/moc_qmenu.cpp:164
#13 0x0175a0aa in QMenuPrivate::_q_actionTriggered (this=0x9556c18) at widgets/qmenu.cpp:1111
#14 0x0175f30e in QMenu::qt_metacall (this=0x93a27f8, _c=QMetaObject::InvokeMetaMethod, _id=8, _a=0xbf9ad048) at .moc/release-shared/moc_qmenu.cpp:105
Comment 3 Ralf Habacker 2011-12-08 11:55:33 UTC
same issue her (In reply to comment #2)

could be reproduced on windows using msvc
Comment 4 Ralf Habacker 2011-12-08 12:13:49 UTC
at least on windows the problem occurs by an overwritten UMLListViewItem object. 

in the current item is requested. 

void UMLListView::popupMenuSel(QAction* action)
{
    UMLListViewItem * temp = (UMLListViewItem*)currentItem();


later the property dialog is displayed: 

        if (Model_Utils::typeIsCanvasWidget(lvt)) {
            object->showProperties(ClassPropDlg::page_gen);


after calling dlg->exec() 

bool UMLObject::showProperties(int page, bool assoc)
{
    Q_UNUSED(page);
    DocWindow *docwindow = UMLApp::app()->docWindow();
    docwindow->updateDocumentation(false);
    QPointer<ClassPropDlg> dlg = new ClassPropDlg((QWidget*)UMLApp::app(), this, assoc);
    bool modified = false;
!!!    if (dlg->exec()) {

then at least the following object members of 'temp' are overwritten 

+		m_label	{d=0x00000000 }	QString
+		m_comap	{d=0xfdfdfdfd e=0xfdfdfdfd }	QMap<UMLClassifierListItem *,UMLListViewItem *>
Comment 5 Ralf Habacker 2011-12-08 13:52:19 UTC
Here is was happens behind the scene 

 	Qt3Supportd4.dll!Q3ListViewItem::~Q3ListViewItem()  Zeile 913	C++
 	umbrello.exe!UMLListViewItem::~UMLListViewItem()  Zeile 175 + 0x45 Bytes	C++
 	umbrello.exe!UMLListViewItem::`scalar deleting destructor'()  + 0x16 Bytes	C++
>	umbrello.exe!UMLListView::moveObject(std::basic_string<char,std::char_traits<char>,std::allocator<char> > srcId, UMLListViewItem::ListViewType srcType, UMLListViewItem * newParent)  Zeile 1656 + 0x34 Bytes	C++
 	umbrello.exe!Model_Utils::treeViewMoveObjectTo(UMLObject * container, UMLObject * object)  Zeile 323	C++
 	umbrello.exe!ClassGenPage::updateObject()  Zeile 434 + 0x10 Bytes	C++
 	umbrello.exe!ClassPropDlg::slotApply()  Zeile 170	C++
 	umbrello.exe!ClassPropDlg::slotOk()  Zeile 159	C++
 	umbrello.exe!ClassPropDlg::qt_metacall(QMetaObject::Call _c, int _id, void * * _a)  Zeile 73 + 0x8 Bytes	C++
 	QtCored4.dll!QMetaObject::metacall(QObject * object, QMetaObject::Call cl, int idx, void * * argv)  Zeile 238	C++
 	QtCored4.dll!QMetaObject::activate(QObject * sender, const QMetaObject * m, int local_signal_index, void * * argv)  Zeile 3280 + 0x27 Bytes	C++
 	kdeui.dll!KDialog::okClicked()  Zeile 258 + 0x15 Bytes	C++
 	kdeui.dll!KDialog::slotButtonClicked(int button)  Zeile 885	C++
 	kdeui.dll!KDialog::qt_metacall(QMetaObject::Call _c, int _id, void * * _a)  Zeile 190 + 0x1b Bytes	C++
 	kdeui.dll!KPageDialog::qt_metacall(QMetaObject::Call _c, int _id, void * * _a)  Zeile 70 + 0x14 Bytes	C++
 	umbrello.exe!ClassPropDlg::qt_metacall(QMetaObject::Call _c, int _id, void * * _a)  Zeile 68 + 0x17 Bytes	C++

After pressing "ok" in the property dialog the widget is going to be moved to the other package, which is handled in 

>	umbrello.exe!UMLListView::moveObject(std::basic_string<char,std::char_traits<char>,std::allocator<char> > srcId, 

In fact a new widget is created and the old one deleted  

    case UMLListViewItem::lvt_Datatype:
        if (newParentType == UMLListViewItem::lvt_Logical_Folder ||
                newParentType == UMLListViewItem::lvt_Datatype_Folder ||
                newParentType == UMLListViewItem::lvt_Logical_View ||
                newParentType == UMLListViewItem::lvt_Class ||
                newParentType == UMLListViewItem::lvt_Interface ||
                newParentType == UMLListViewItem::lvt_Package) {
            newItem = move->deepCopy(newParent);
            if (m_doc->loading())         // deletion is not safe while loading
                move->setVisible(false);  // (the <listview> XMI may be corrupted)
            else
!               delete move;

which means that 'temp' the current list view item is destroyed.
Comment 6 Oliver Kellogg 2012-03-18 18:11:52 UTC
*** Bug 242142 has been marked as a duplicate of this bug. ***
Comment 7 Oliver Kellogg 2012-05-27 08:19:30 UTC
*** Bug 298728 has been marked as a duplicate of this bug. ***
Comment 8 Ralf Habacker 2013-11-06 17:18:07 UTC
apply fixed bug from 4.9.0 changelog
Comment 9 Ralf Habacker 2013-11-19 20:24:37 UTC
*** Bug 188300 has been marked as a duplicate of this bug. ***
Comment 10 Ralf Habacker 2014-04-29 12:04:14 UTC
*** Bug 273594 has been marked as a duplicate of this bug. ***