From 784614655f55f81eec04c2b898e8ab8dbb99a3ec Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Sun, 19 Nov 2017 20:42:55 +0100 Subject: Fix T53343: Custom Normal Data Transfer Crashes when some vertexes have no faces. Odd nobody noticed this earlier, was obvious bug in code logic here... :/ To be backported to 2.79a. --- source/blender/blenkernel/intern/mesh_remap.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'source/blender/blenkernel/intern/mesh_remap.c') diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c index b0580f75044..f321c94bf00 100644 --- a/source/blender/blenkernel/intern/mesh_remap.c +++ b/source/blender/blenkernel/intern/mesh_remap.c @@ -1482,6 +1482,7 @@ void BKE_mesh_remap_calc_loops_from_dm( for (i = vert_to_refelem_map_src[nearest.index].count; i--;) { const int index_src = vert_to_refelem_map_src[nearest.index].indices[i]; + BLI_assert(index_src != -1); const float dot = dot_v3v3(nors_src[index_src], *nor_dst); pidx_src = (mode == MREMAP_MODE_LOOP_NEAREST_LOOPNOR) ? @@ -1522,7 +1523,12 @@ void BKE_mesh_remap_calc_loops_from_dm( } } } - if (mode == MREMAP_MODE_LOOP_NEAREST_POLYNOR) { + if (best_index_src == -1) { + /* We found no item to map back from closest vertex... */ + best_nor_dot = -1.0f; + hit_dist = FLT_MAX; + } + else if (mode == MREMAP_MODE_LOOP_NEAREST_POLYNOR) { /* Our best_index_src is a poly one for now! * Have to find its loop matching our closest vertex. */ mp_src = &polys_src[best_index_src]; -- cgit v1.2.3