From 52b2769b9c1283dbe42176fc5581817f9e7d3a94 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Tue, 25 Jan 2022 13:56:00 -0600 Subject: Fix T95169: Assert in weld modifier code Return early before accessing the array when all edges are merged. --- source/blender/geometry/intern/mesh_merge_by_distance.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/blender/geometry/intern/mesh_merge_by_distance.cc b/source/blender/geometry/intern/mesh_merge_by_distance.cc index e49848a030b..1a07ebf31f6 100644 --- a/source/blender/geometry/intern/mesh_merge_by_distance.cc +++ b/source/blender/geometry/intern/mesh_merge_by_distance.cc @@ -563,14 +563,10 @@ static void weld_edge_groups_setup(const int medge_len, Array &r_edge_groups) { /* Get weld edge groups. */ - - struct WeldGroupEdge *wegrp_iter; - int wgroups_len = wedge.size() - edge_kill_len; r_edge_groups.reinitialize(wgroups_len); r_edge_groups.fill({{0}}); MutableSpan wegroups = r_edge_groups; - wegrp_iter = &r_edge_groups[0]; wgroups_len = 0; for (const int i : IndexRange(medge_len)) { @@ -584,11 +580,10 @@ static void weld_edge_groups_setup(const int medge_len, } else { we->edge_dest = we->edge_orig; - wegrp_iter->v1 = we->vert_a; - wegrp_iter->v2 = we->vert_b; + wegroups[wgroups_len].v1 = we->vert_a; + wegroups[wgroups_len].v2 = we->vert_b; r_edge_groups_map[i] = wgroups_len; wgroups_len++; - wegrp_iter++; } } else { @@ -598,6 +593,11 @@ static void weld_edge_groups_setup(const int medge_len, BLI_assert(wgroups_len == wedge.size() - edge_kill_len); + if (wgroups_len == 0) { + /* All edges in the context are collapsed. */ + return; + } + for (const WeldEdge &we : wedge) { if (we.flag == ELEM_COLLAPSED) { continue; -- cgit v1.2.3