From 2a27927582beced4623a8279097164762c5feda8 Mon Sep 17 00:00:00 2001 From: ice0 Date: Fri, 13 Aug 2021 09:50:05 +0600 Subject: [PATCH] Fixed crash of test on Void Linux Crash caused by incorrect work with iterators --- synfig-studio/src/synfigapp/actions/layerduplicate.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/synfig-studio/src/synfigapp/actions/layerduplicate.cpp b/synfig-studio/src/synfigapp/actions/layerduplicate.cpp index dee580fed7a..fd018756075 100644 --- a/synfig-studio/src/synfigapp/actions/layerduplicate.cpp +++ b/synfig-studio/src/synfigapp/actions/layerduplicate.cpp @@ -416,7 +416,11 @@ LayerDuplicate::replace_valuenodes(const std::mapdynamic_param_list().cbegin();iter!=cloned_layer->dynamic_param_list().cend();++iter) + // disconnect_dynamic_param/connect_dynamic_param can change dynamic_param_list() while iterating + // which makes iter invalid, so we create a copy of dynamic_param_list() first + auto param_list = cloned_layer->dynamic_param_list(); + + for (auto iter=param_list.cbegin();iter!=param_list.cend();++iter) { for (const auto& vn_pair : cloned_valuenode_map) { if (iter->second == vn_pair.first) {