Fix T89367: Crash running edit-mesh select_linked_pick from Python
This commit is contained in:
parent
a6f275cad3
commit
635b4db162
Notes:
blender-bot
2023-02-14 02:58:19 +01:00
Referenced by issue #89367, Running select_linked_pick with a negative index crashes Blender with an access violation
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue