diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-06-23 12:44:44 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-06-23 12:45:48 +0300 |
commit | 635b4db162731a100c255faa11ca9e2bd40d7d93 (patch) | |
tree | def47b42a1e4f859989e15baeee4f40b1bbc331a /source/blender | |
parent | a6f275cad32e9566a9028318c21b70c2a9ece66d (diff) |
Fix T89367: Crash running edit-mesh select_linked_pick from Python
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/mesh/editmesh_select.c | 5 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_utils.c | 8 | ||||
-rw-r--r-- | source/blender/editors/mesh/mesh_intern.h | 6 |
3 files changed, 10 insertions, 9 deletions
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, |