[Bf-blender-cvs] [635b4db1627] master: Fix T89367: Crash running edit-mesh select_linked_pick from Python

Campbell Barton noreply at git.blender.org
Wed Jun 23 11:47:12 CEST 2021


Commit: 635b4db162731a100c255faa11ca9e2bd40d7d93
Author: Campbell Barton
Date:   Wed Jun 23 19:44:44 2021 +1000
Branches: master
https://developer.blender.org/rB635b4db162731a100c255faa11ca9e2bd40d7d93

Fix T89367: Crash running edit-mesh select_linked_pick from Python

===================================================================

M	source/blender/editors/mesh/editmesh_select.c
M	source/blender/editors/mesh/editmesh_utils.c
M	source/blender/editors/mesh/mesh_intern.h

===================================================================

diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c
index c600df503d8..46abf71c4e2 100644
--- a/source/blender/editors/mesh/editmesh_select.c
+++ b/source/blender/editors/mesh/editmesh_select.c
@@ -3642,8 +3642,9 @@ static int edbm_select_linked_pick_exec(bContext *C, wmOperator *op)
 
   {
     ViewLayer *view_layer = CTX_data_view_layer(C);
-    const int object_index = RNA_int_get(op->ptr, "object_index");
-    const int index = RNA_int_get(op->ptr, "index");
+    /* Intentionally wrap negative values so the lookup fails. */
+    const uint object_index = (uint)RNA_int_get(op->ptr, "object_index");
+    const uint index = (uint)RNA_int_get(op->ptr, "index");
     ele = EDBM_elem_from_index_any_multi(view_layer, object_index, index, &obedit);
   }
 
diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c
index f70d9b044ac..cd3d84535c9 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -1574,7 +1574,7 @@ int EDBM_elem_to_index_any(BMEditMesh *em, BMElem *ele)
   return index;
 }
 
-BMElem *EDBM_elem_from_index_any(BMEditMesh *em, int index)
+BMElem *EDBM_elem_from_index_any(BMEditMesh *em, uint index)
 {
   BMesh *bm = em->bm;
 
@@ -1615,14 +1615,14 @@ int EDBM_elem_to_index_any_multi(ViewLayer *view_layer,
 }
 
 BMElem *EDBM_elem_from_index_any_multi(ViewLayer *view_layer,
-                                       int object_index,
-                                       int elem_index,
+                                       uint object_index,
+                                       uint elem_index,
                                        Object **r_obedit)
 {
   uint bases_len;
   Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(view_layer, NULL, &bases_len);
   *r_obedit = NULL;
-  Object *obedit = ((uint)object_index < bases_len) ? bases[object_index]->object : NULL;
+  Object *obedit = (object_index < bases_len) ? bases[object_index]->object : NULL;
   MEM_freeN(bases);
   if (obedit != NULL) {
     BMEditMesh *em = BKE_editmesh_from_object(obedit);
diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h
index 763bdf04d83..9e2e2786347 100644
--- a/source/blender/editors/mesh/mesh_intern.h
+++ b/source/blender/editors/mesh/mesh_intern.h
@@ -77,15 +77,15 @@ struct BMElem *EDBM_elem_from_selectmode(struct BMEditMesh *em,
                                          struct BMFace *efa);
 
 int EDBM_elem_to_index_any(struct BMEditMesh *em, struct BMElem *ele);
-struct BMElem *EDBM_elem_from_index_any(struct BMEditMesh *em, int index);
+struct BMElem *EDBM_elem_from_index_any(struct BMEditMesh *em, uint index);
 
 int EDBM_elem_to_index_any_multi(struct ViewLayer *view_layer,
                                  struct BMEditMesh *em,
                                  struct BMElem *ele,
                                  int *r_object_index);
 struct BMElem *EDBM_elem_from_index_any_multi(struct ViewLayer *view_layer,
-                                              int object_index,
-                                              int elem_index,
+                                              uint object_index,
+                                              uint elem_index,
                                               struct Object **r_obedit);
 
 bool edbm_extrude_edges_indiv(struct BMEditMesh *em,



More information about the Bf-blender-cvs mailing list