From c088ba55f9265bb745a741be1b695a26d378c82c Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 16 Nov 2022 21:02:49 +0100 Subject: [PATCH] Gui: fix endless-loop in View3DInventorSelection::checkGroupOnTop --- src/Gui/View3DInventorSelection.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Gui/View3DInventorSelection.cpp b/src/Gui/View3DInventorSelection.cpp index 00fce4b7e7..334ff1ecf9 100644 --- a/src/Gui/View3DInventorSelection.cpp +++ b/src/Gui/View3DInventorSelection.cpp @@ -203,12 +203,24 @@ void View3DInventorSelection::checkGroupOnTop(const SelectionChanges &Reason) std::vector groups; auto grpVp = vp; + std::set visited; for(auto childVp=vp;;childVp=grpVp) { auto grp = App::GeoFeatureGroupExtension::getGroupOfObject(childVp->getObject()); - if(!grp || !grp->getNameInDocument()) break; + if (!grp || !grp->getNameInDocument()) { + break; + } + grpVp = dynamic_cast( Application::Instance->getViewProvider(grp)); - if(!grpVp) break; + if (!grpVp) { + break; + } + + // avoid endless-loops + if (!visited.insert(childVp).second) { + break; + } + auto childRoot = grpVp->getChildRoot(); auto modeSwitch = grpVp->getModeSwitch(); auto idx = modeSwitch->whichChild.getValue();