Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2021-06-23 12:44:44 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-06-23 12:45:48 +0300
commit635b4db162731a100c255faa11ca9e2bd40d7d93 (patch)
treedef47b42a1e4f859989e15baeee4f40b1bbc331a
parenta6f275cad32e9566a9028318c21b70c2a9ece66d (diff)
Fix T89367: Crash running edit-mesh select_linked_pick from Python
-rw-r--r--source/blender/editors/mesh/editmesh_select.c5
-rw-r--r--source/blender/editors/mesh/editmesh_utils.c8
-rw-r--r--source/blender/editors/mesh/mesh_intern.h6
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,