| 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 First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | unspecified | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented 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 |