Summary: | crash: umbrello crashes if you change multiplicity in an association in ERD | ||
---|---|---|---|
Product: | [Applications] umbrello | Reporter: | Haeber <thomas> |
Component: | general | Assignee: | Oliver Kellogg <okellogg> |
Status: | RESOLVED FIXED | ||
Severity: | crash | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | unspecified | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Haeber
2007-04-06 20:19:00 UTC
the debug output: umbrello: WorkToolBar::loadPixmaps: n_buttonInfos = 43 umbrello: UMLListViewItem::init: s_pListView still NULL, setting it now umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: ERROR: UMLApp::setCurrentView: m_viewStack is NULL umbrello: Object_Factory::createUMLObject(): parentPkg is not set, assuming Model_Type 4 umbrello: Object_Factory::createUMLObject(): parentPkg is not set, assuming Model_Type 4 umbrello: UMLView::addWidget (n type=313): position (0,0) is out of range umbrello: UMLView::addWidget (m type=313): position (0,0) is out of range umbrello: ERROR: UMLView::addWidget: Not adding (id=Q7Uttd4nvsyJ/type=313/name=n) because it's already there umbrello: ERROR: UMLView::addWidget: Not adding (id=wifJSPxTCyqO/type=313/name=m) because it's already there KCrash: Application 'umbrello' crashing... Only happens when using the Association Properties menu, i.e. does not happen when selecting "Change Multiplicity..." after right clicking on the multiplicity label. Backtrace: #4 0x416affcc in memcpy () from /lib/tls/libc.so.6 #5 0x415eb313 in std::string::_Rep::_M_clone () from /usr/lib/libstdc++.so.5 #6 0x415eb5b7 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string () from /usr/lib/libstdc++.so.5 #7 0x081f6bee in UMLWidget::getID (this=0x8a15a40) at umlwidget.cpp:184 #8 0x081e4b78 in UMLView::findWidget (this=0x8ae5ef8, id= {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<No data fields>}, _M_p = 0x8c42984 "0XWNnqkCkggZ"}, static _S_empty_rep_storage = {0, 0, 0, 0}}) at umlview.cpp:733 #9 0x081e74a2 in UMLView::addWidget (this=0x8ae5ef8, pWidget=0x8933448, isPasteOperation=false) at umlview.cpp:1447 #10 0x0812e434 in AssociationWidget::setMulti (this=0x8be2950, strMulti=@0xbfffd250, role=A) at /home/kellogg/kdesdk-3.5-branch/umbrello/umbrello/associationwidget.cpp:369 #11 0x08279fd4 in AssocRolePage::updateObject (this=0x8b9cc88) at dialogs/assocrolepage.cpp:248 #12 0x08277c57 in AssocPropDlg::slotApply (this=0xbfffdef0) at /home/kellogg/kdesdk-3.5-branch/umbrello/umbrello/dialogs/assocpropdlg.cpp:69 #13 0x08277be9 in AssocPropDlg::slotOk (this=0xbfffdef0) at dialogs/assocpropdlg.cpp:58 #14 0x40826ac0 in KDialogBase::qt_invoke () from /opt/kde3/lib/libkdeui.so.4 #15 0x082782b1 in AssocPropDlg::qt_invoke (this=0xbfffdef0, _id=74, _o=0xbfffd390) at dialogs/assocpropdlg.moc:87 #16 0x40e6415e in QObject::activate_signal () from /usr/lib/qt3/lib/libqt-mt.so.3 #17 0x40e64906 in QObject::activate_signal () from /usr/lib/qt3/lib/libqt-mt.so.3 #18 0x411bf51c in QButton::clicked () from /usr/lib/qt3/lib/libqt-mt.so.3 #19 0x40efca04 in QButton::mouseReleaseEvent () from /usr/lib/qt3/lib/libqt-mt.so.3 #20 0x40e9a6c5 in QWidget::event () from /usr/lib/qt3/lib/libqt-mt.so.3 #21 0x40e00faf in QApplication::internalNotify () from /usr/lib/qt3/lib/libqt-mt.so.3 #22 0x40e034b6 in QApplication::notify () from /usr/lib/qt3/lib/libqt-mt.so.3 #23 0x40a8c6b1 in KApplication::notify () from /opt/kde3/lib/libkdecore.so.4 #24 0x40d9e28e in QETWidget::translateMouseEvent () from /usr/lib/qt3/lib/libqt-mt.so.3 #25 0x40d9d146 in QApplication::x11ProcessEvent () from /usr/lib/qt3/lib/libqt-mt.so.3 #26 0x40dadc38 in QEventLoop::processEvents () from /usr/lib/qt3/lib/libqt-mt.so.3 #27 0x40e190a1 in QEventLoop::enterLoop () from /usr/lib/qt3/lib/libqt-mt.so.3 #28 0x40e02b0f in QApplication::enter_loop () from /usr/lib/qt3/lib/libqt-mt.so.3 #29 0x40ffae12 in QDialog::exec () from /usr/lib/qt3/lib/libqt-mt.so.3 #30 0x081350c3 in AssociationWidget::showDialog (this=0x8be2950) at associationwidget.cpp:2281 #31 0x081355f6 in AssociationWidget::slotMenuSelection (this=0x8be2950, sel=85) at associationwidget.cpp:2332 SVN commit 651424 by okellogg: setAssocType(): Do not physically delete the floatingtext widgets because they are also stored in the UMLView::m_WidgetList. One round of applause to valgrind - I wonder how long it would have taken me to find this bug without it. BUG:143909 M +1 -0 ChangeLog M +8 -10 umbrello/associationwidget.cpp --- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #651423:651424 @@ -33,6 +33,7 @@ * Missing "with" on Ada code generation for aggregation (142392) * Operation Properties "Type" combo box too small (143319) * Support duplication of diagrams (143581) +* Crash on changing multiplicity in an association in ERD (143909) Version 1.5.61 --- branches/KDE/3.5/kdesdk/umbrello/umbrello/associationwidget.cpp #651423:651424 @@ -873,26 +873,24 @@ m_AssocType = type; m_LinePath.setAssocType(type); // If the association new type is not supposed to have Multiplicity - // FloatingTexts and a Role FloatingTextWidget then set the internal - // floating text pointers to null. + // FloatingTexts and a Role FloatingTextWidget then set the texts + // to empty. + // NB We do not physically delete the floatingtext widgets here because + // those widgets are also stored in the UMLView::m_WidgetList. if( !AssocRules::allowMultiplicity(type, getWidget(A)->getBaseType()) ) { if (m_role[A].m_pMulti) { - delete m_role[A].m_pMulti; - m_role[A].m_pMulti = NULL; + m_role[A].m_pMulti->setName(""); } if (m_role[B].m_pMulti) { - delete m_role[B].m_pMulti; - m_role[B].m_pMulti = NULL; + m_role[B].m_pMulti->setName(""); } } if( !AssocRules::allowRole( type ) ) { if (m_role[A].m_pRole) { - delete m_role[A].m_pRole; - m_role[A].m_pRole = NULL; + m_role[A].m_pRole->setName(""); } if (m_role[B].m_pRole) { - delete m_role[B].m_pRole; - m_role[B].m_pRole = NULL; + m_role[B].m_pRole->setName(""); } setRoleDoc("", A); setRoleDoc("", B); SVN commit 651441 by okellogg: m_AssocRules: Allow multiplicity on the relationship association between two entities. In ER modeling, there exists the so-called "cardinality" which could roughly be equated to UML multiplicity, see e.g. http://www.dama-michigan.org/2 Jerry Stembridge Feature Article.htm With this change, the multplicity-zeroing logic in AssociationwWidget::setAssocType() does not take effect in the first place. CCBUG:143909 M +3 -2 assocrules.cpp --- branches/KDE/3.5/kdesdk/umbrello/umbrello/assocrules.cpp #651440:651441 @@ -274,7 +274,8 @@ } AssocRules::Assoc_Rule AssocRules::m_AssocRules []= { - // Association widgetA widgetB role multiplicity directional self + // Association widgetA widgetB role multi directional self + //---------------+----------------+----------------+-------+-------+-------+--------- { at_Association_Self,wt_Class, wt_Class, true, true, true, true }, { at_Association_Self,wt_Object, wt_Object, true, true, true, true }, { at_Association_Self,wt_Interface, wt_Interface, true, true, true, true }, @@ -373,7 +374,7 @@ { at_Anchor, wt_Message, wt_Note, false, false, false, false }, { at_Anchor, wt_State, wt_Note, false, false, false, false }, { at_Anchor, wt_Activity, wt_Note, false, false, false, false }, - { at_Relationship, wt_Entity, wt_Entity, true, false, true, false }, + { at_Relationship, wt_Entity, wt_Entity, true, true, true, true }, }; int AssocRules::m_nNumRules = sizeof( m_AssocRules ) / sizeof( AssocRules::Assoc_Rule ); Thanks for this really fast bugfix. It works flawlessly. Best regards Thomas |