jnxd wrote: ↑Mon Feb 21, 2022 9:51 pm
I believe
PR #6403 fixes this, at least for this case.
When looking in
gdb I noticed that a larger set of entities are selected than when we select one at a time (even the vertices). Clearing the selection before making any changes makes both the cases same.
When doing the procedure with an address-sanitizer build we get much more details about the crash. The summary of the report is:
==12246==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6100001e8d34 at pc 0x00000049d94a bp 0x7ffcb64839d0 sp 0x7ffcb6483198
#0 0x4ce1ed in operator new[](unsigned long) (/home/werner/Projects/build_asan/bin/FreeCAD+0x4ce1ed)
#1 0x7f80c8eb2216 in SoMFColor::allocValues(int) (/usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x36e216)
SUMMARY: AddressSanitizer: heap-buffer-overflow (/home/werner/Projects/build_asan/bin/FreeCAD+0x49d949) in __asan_memcpy
The callstack is:
Code: Select all
#0 0x49d949 in __asan_memcpy (/home/werner/Projects/build_asan/bin/FreeCAD+0x49d949)
#1 0x7f806ec71012 in SketcherGui::EditModeGeometryCoinManager::updateGeometryColor(Sketcher::GeoListModel<std::unique_ptr<Sketcher::GeometryFacade const, std::default_delete<Sketcher::GeometryFacade const> > > const&, bool)::$_4::operator()(int) const /home/werner/Projects/FreeCAD/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp:314:51
#2 0x7f806ec709d5 in std::_Function_handler<void (int), SketcherGui::EditModeGeometryCoinManager::updateGeometryColor(Sketcher::GeoListModel<std::unique_ptr<Sketcher::GeometryFacade const, std::default_delete<Sketcher::GeometryFacade const> > > const&, bool)::$_4>::_M_invoke(std::_Any_data const&, int&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/std_function.h:316:2
#3 0x7f806ed43fa2 in std::function<void (int)>::operator()(int) const /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/std_function.h:706:14
#4 0x7f806ed30598 in SketcherGui::ViewProviderSketch::executeOnSelectionPointSet(std::function<void (int)>&&) const /home/werner/Projects/FreeCAD/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp:3557:9
#5 0x7f806ec71f4f in SketcherGui::ViewProviderSketchCoinAttorney::executeOnSelectionPointSet(SketcherGui::ViewProviderSketch const&, std::function<void (int)>&&) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/Gui/ViewProviderSketchCoinAttorney.h:248:8
#6 0x7f806ec68f88 in SketcherGui::EditModeGeometryCoinManager::updateGeometryColor(Sketcher::GeoListModel<std::unique_ptr<Sketcher::GeometryFacade const, std::default_delete<Sketcher::GeometryFacade const> > > const&, bool) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp:310:9
#7 0x7f806ec457d2 in SketcherGui::EditModeCoinManager::updateColor(Sketcher::GeoListModel<std::unique_ptr<Sketcher::GeometryFacade const, std::default_delete<Sketcher::GeometryFacade const> > > const&) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp:618:35
#8 0x7f806ed1185b in SketcherGui::ViewProviderSketch::draw(bool, bool) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp:2548:25
#9 0x7f806ed203d9 in SketcherGui::ViewProviderSketch::updateData(App::Property const*) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp:2606:17
#10 0x7f80cf0b6677 in Gui::ViewProvider::update(App::Property const*) /home/werner/Projects/FreeCAD/src/Gui/ViewProvider.cpp:312:5
#11 0x7f80cf116e63 in Gui::ViewProviderDocumentObject::update(App::Property const*) /home/werner/Projects/FreeCAD/src/Gui/ViewProviderDocumentObject.cpp:397:23
#12 0x7f80cdf33052 in Gui::Document::slotChangedObject(App::DocumentObject const&, App::Property const&) /home/werner/Projects/FreeCAD/src/Gui/Document.cpp:804:27
#13 0x7f80cdf995a1 in boost::_mfi::mf2<void, Gui::Document, App::DocumentObject const&, App::Property const&>::operator()(Gui::Document*, App::DocumentObject const&, App::Property const&) const /usr/include/boost/bind/mem_fn_template.hpp:280:29
<snip>
...
#28 0x7f80cb45012d in App::Document::onChangedProperty(App::DocumentObject const*, App::Property const*) /home/werner/Projects/FreeCAD/src/App/Document.cpp:1525:5
#29 0x7f80cb7a9df4 in App::DocumentObject::onChanged(App::Property const*) /home/werner/Projects/FreeCAD/src/App/DocumentObject.cpp:791:16
#30 0x7f807dc966f0 in Part::Feature::onChanged(App::Property const*) /home/werner/Projects/FreeCAD/src/Mod/Part/App/PartFeature.cpp:563:17
#31 0x7f8070788967 in Sketcher::SketchObject::onChanged(App::Property const*) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/App/SketchObject.cpp:7945:25
#32 0x7f80cbb72be9 in App::Property::hasSetValue() /home/werner/Projects/FreeCAD/src/App/Property.cpp:229:17
#33 0x7f8070bcf324 in Sketcher::PropertyConstraintList::acceptGeometry(std::vector<Part::Geometry*, std::allocator<Part::Geometry*> > const&) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/App/PropertyConstraintList.cpp:379:5
#34 0x7f80706fc163 in Sketcher::SketchObject::acceptGeometry() /home/werner/Projects/FreeCAD/src/Mod/Sketcher/App/SketchObject.cpp:853:17
#35 0x7f8070788479 in Sketcher::SketchObject::onChanged(App::Property const*) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/App/SketchObject.cpp:7883:25
#36 0x7f80cbb7273e in App::Property::touch() /home/werner/Projects/FreeCAD/src/App/Property.cpp:216:17
#37 0x7f807076cd1d in Sketcher::SketchObject::convertToNURBS(int) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/App/SketchObject.cpp:5651:14
#38 0x7f8070b69869 in Sketcher::SketchObjectPy::convertToNURBS(_object*) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/App/SketchObjectPyImp.cpp:1495:37
#39 0x7f8070b3dfc5 in Sketcher::SketchObjectPy::staticCallback_convertToNURBS(_object*, _object*) /home/werner/Projects/build_asan/src/Mod/Sketcher/App/SketchObjectPy.cpp:3101:61
#40 0x7f80cc85253a in _PyCFunction_FastCallDict (/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0+0x21353a)
#41 0x7f80cc7bb1eb (/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0+0x17c1eb)
#42 0x7f80cc7c1302 in _PyEval_EvalFrameDefault (/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0+0x182302)
#43 0x7f80cc7baa0e (/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0+0x17ba0e)
#44 0x7f80cc7bb4cd in PyEval_EvalCodeEx (/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0+0x17c4cd)
#45 0x7f80cc7bc24a in PyEval_EvalCode (/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0+0x17d24a)
#46 0x7f80cc78d84a in PyRun_StringFlags (/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0+0x14e84a)
#47 0x7f80ca5b6c10 in Base::InterpreterSingleton::runString[abi:cxx11](char const*) /home/werner/Projects/FreeCAD/src/Base/Interpreter.cpp:252:15
#48 0x7f80ce254a73 in Gui::Command::_runCommand(char const*, int, Gui::Command::DoCmd_Type, char const*) /home/werner/Projects/FreeCAD/src/Gui/Command.cpp:691:29
#49 0x7f80ce254649 in Gui::Command::_doCommand(char const*, int, Gui::Command::DoCmd_Type, char const*, ...) /home/werner/Projects/FreeCAD/src/Gui/Command.cpp:650:5
#50 0x7f806e94cc6d in void Gui::cmdAppObjectArgs<int&>(App::DocumentObject const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int&) /home/werner/Projects/FreeCAD/src/Gui/CommandT.h:312:9
#51 0x7f806eaa1fe4 in CmdSketcherConvertToNURB::activated(int) /home/werner/Projects/FreeCAD/src/Mod/Sketcher/Gui/CommandSketcherBSpline.cpp:409:13
So as such the clearSelection() doesn't solve the bug directly but indirectly.
It cures the symptoms but the question is what's the actual bug underneath.