From 4aa22fde586f49047deae651ed1ec1d9ff30644e Mon Sep 17 00:00:00 2001 From: Vadim Kurland Date: Tue, 12 Aug 2008 16:03:26 +0000 Subject: [PATCH] fixed bug 2047992 ] segfault cloning policies in version 3 --- doc/ChangeLog | 8 +++ src/gui/ObjectManipulator.cpp | 83 ++++++++++++----------- src/gui/check_update_url.h | 1 + test/ipt/objects-for-regression-tests.fwb | 82 ++++++++++++++-------- 4 files changed, 104 insertions(+), 70 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index adca6924b..be0880d61 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,11 @@ +2008-08-12 Vadim Kurland + + * ObjectManipulator.cpp (ObjectManipulator::contextMenuRequested): + fixed bug #2047992: "segfault cloning policies in version + 3". "Duplicate" and "Move" context menu items should not be + presented if an object for which context menu is called is policy + or interface. + 2008-08-11 Vadim Kurland * ObjectTreeView.cpp (ObjectTreeView::edit): double-clicking on an diff --git a/src/gui/ObjectManipulator.cpp b/src/gui/ObjectManipulator.cpp index 5cd9f519d..bdf998221 100644 --- a/src/gui/ObjectManipulator.cpp +++ b/src/gui/ObjectManipulator.cpp @@ -927,53 +927,60 @@ void ObjectManipulator::contextMenuRequested(const QPoint &pos) QAction *edtID = popup->addAction( tr("Edit"), this, SLOT( editSelectedObject())); - QMenu *duptargets = popup->addMenu( tr("Duplicate ...") ); - QMenu *movetargets = popup->addMenu( tr("Move ...") ); + QMenu *duptargets = NULL; + QMenu *movetargets = NULL; + int moveTargetsCounter = 0; - connect ( duptargets, SIGNAL ( triggered(QAction*) ), - this, SLOT( duplicateObj(QAction*) ) ); - connect ( movetargets, SIGNAL ( triggered(QAction*) ), - this, SLOT( moveObj(QAction*) ) ); + if (!Interface::isA(currentObj) && RuleSet::cast(currentObj)==NULL) + { + duptargets = popup->addMenu( tr("Duplicate ...") ); + movetargets = popup->addMenu( tr("Move ...") ); + + connect ( duptargets, SIGNAL ( triggered(QAction*) ), + this, SLOT( duplicateObj(QAction*) ) ); + connect ( movetargets, SIGNAL ( triggered(QAction*) ), + this, SLOT( moveObj(QAction*) ) ); /* we add " ... to library ..." submenu to the "Move " menu item only * if user did not select a library, or if they selected several * objects. Method moveObj knows that library should not be moved * into another library. */ - bool libSelected = - (getCurrentObjectTree()->getNumSelected()==1 && - Library::isA(getCurrentObjectTree()->getSelectedObjects().front())); + bool libSelected = + (getCurrentObjectTree()->getNumSelected()==1 && + Library::isA(getCurrentObjectTree()->getSelectedObjects().front())); - int libid = 0; + int libid = 0; - FWObject *cl = getCurrentLib(); - int moveTargetsCounter = 0; - vector::iterator i; + FWObject *cl = getCurrentLib(); + vector::iterator i; - for (i=idxToLibs.begin(); i!=idxToLibs.end(); ++i,++libid) - { - FWObject *lib = *i; + for (i=idxToLibs.begin(); i!=idxToLibs.end(); ++i,++libid) + { + FWObject *lib = *i; - if ( lib->getId()==FWObjectDatabase::STANDARD_LIB_ID || - lib->getId()==FWObjectDatabase::TEMPLATE_LIB_ID || - lib->getId()==FWObjectDatabase::DELETED_OBJECTS_ID || - lib->isReadOnly()) - continue; + if ( lib->getId()==FWObjectDatabase::STANDARD_LIB_ID || + lib->getId()==FWObjectDatabase::TEMPLATE_LIB_ID || + lib->getId()==FWObjectDatabase::DELETED_OBJECTS_ID || + lib->isReadOnly()) + continue; - QAction* dact = duptargets->addAction( + QAction* dact = duptargets->addAction( tr("place in library %1").arg( QString::fromUtf8(lib->getName().c_str()))); - dact->setData(libid); + dact->setData(libid); - /* can't move to the same library or if selected object is a library - */ - if (!libSelected && lib!=cl) - { - moveTargetsCounter++; - QAction* mact = movetargets->addAction( + /* can't move to the same library or if selected object is + * a library + */ + if (!libSelected && lib!=cl) + { + moveTargetsCounter++; + QAction* mact = movetargets->addAction( tr("to library %1").arg( QString::fromUtf8(lib->getName().c_str()))); - mact->setData(libid); + mact->setData(libid); + } } } @@ -1102,15 +1109,9 @@ void ObjectManipulator::contextMenuRequested(const QPoint &pos) popup->addSeparator(); popup->addAction( tr("Find"), this, SLOT( findObject())); - popup->addAction( tr("Where used"), this, SLOT( findWhereUsedSlot())); -/* - if (Firewall::cast(currentObj)!=NULL) - { - popup->addSeparator(); - popup->addAction( tr("Compile"), this, SLOT( compile())); - popup->addAction( tr("Install"), this, SLOT( install())); - } - */ + + if (RuleSet::cast(currentObj)==NULL) + popup->addAction( tr("Where used"), this, SLOT( findWhereUsedSlot())); } else { @@ -1119,7 +1120,9 @@ void ObjectManipulator::contextMenuRequested(const QPoint &pos) } - if (Firewall::cast(currentObj)!=NULL || ObjectGroup::cast(currentObj)!=NULL) + if (Firewall::cast(currentObj)!=NULL || + (ObjectGroup::cast(currentObj)!=NULL && + currentObj->getName()=="Firewalls")) { popup->addSeparator(); popup->addAction( tr("Compile"), this, SLOT( compile())); diff --git a/src/gui/check_update_url.h b/src/gui/check_update_url.h index dfe147b20..d2798e16c 100644 --- a/src/gui/check_update_url.h +++ b/src/gui/check_update_url.h @@ -28,6 +28,7 @@ #define CHECK_UPDATE_URL_HH #include "../../VERSION.h" +#include "../../build_num" #define CHECK_UPDATE_URL "http://www.fwbuilder.org/update_checks/check.cgi?v="VERSION diff --git a/test/ipt/objects-for-regression-tests.fwb b/test/ipt/objects-for-regression-tests.fwb index 2cfd1ff7a..c3e93ba57 100644 --- a/test/ipt/objects-for-regression-tests.fwb +++ b/test/ipt/objects-for-regression-tests.fwb @@ -1,6 +1,6 @@ - + @@ -591,7 +591,6 @@ - @@ -19245,7 +19244,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19340,7 +19339,30 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + + + + + + + + + + + + + + + + + + + + + + + + @@ -19363,7 +19385,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19387,7 +19409,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19410,7 +19432,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19433,7 +19455,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19456,7 +19478,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19485,7 +19507,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19514,7 +19536,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19544,7 +19566,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19573,7 +19595,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19602,7 +19624,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19622,7 +19644,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19657,7 +19679,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19692,7 +19714,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19728,7 +19750,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19764,7 +19786,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19799,7 +19821,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19834,7 +19856,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19869,7 +19891,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19904,7 +19926,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19946,7 +19968,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -19988,7 +20010,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -20031,7 +20053,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -20075,7 +20097,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -20118,7 +20140,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -20146,7 +20168,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - + @@ -20189,7 +20211,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT% - +