Fix T66030: [CRASH] Modifying Normals with Skin Modifier.
authorBastien Montagne <montagne29@wanadoo.fr>
Mon, 24 Jun 2019 14:29:37 +0000 (16:29 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Mon, 24 Jun 2019 14:29:37 +0000 (16:29 +0200)
clnor editing code was simply not checking at all whether it has
something to work on... Guess nobody had idea to edit custom normals on
a mesh that has no normals before! :P

This should probably be handled in a poll function too, to completely
disable those tools when there are no faces/loops, but let's keep it to
minimal changes at that point.

source/blender/bmesh/intern/bmesh_mesh.c
source/blender/editors/mesh/editmesh_tools.c

index 09a39c05565afe530ceb4054081d27dc2f39a663..c796bdea688fb26fe0d096e07f40d33feec6fd8c 100644 (file)
@@ -1582,7 +1582,7 @@ BMLoopNorEditDataArray *BM_loop_normal_editdata_array_init(BMesh *bm,
 
   BLI_assert(bm->spacearr_dirty == 0);
 
-  BMLoopNorEditDataArray *lnors_ed_arr = MEM_mallocN(sizeof(*lnors_ed_arr), __func__);
+  BMLoopNorEditDataArray *lnors_ed_arr = MEM_callocN(sizeof(*lnors_ed_arr), __func__);
   lnors_ed_arr->lidx_to_lnor_editdata = MEM_callocN(
       sizeof(*lnors_ed_arr->lidx_to_lnor_editdata) * bm->totloop, __func__);
 
index 48cc46f5060eb18955da78f5af828943bb27bd2b..26d830ccaeccf449c120d71a10aa7efef4edcb7f 100644 (file)
@@ -8571,6 +8571,10 @@ static int edbm_normals_tools_exec(bContext *C, wmOperator *op)
   BMEditMesh *em = BKE_editmesh_from_object(obedit);
   BMesh *bm = em->bm;
 
+  if (bm->totloop == 0) {
+    return OPERATOR_CANCELLED;
+  }
+
   const int mode = RNA_enum_get(op->ptr, "mode");
   const bool absolute = RNA_boolean_get(op->ptr, "absolute");