Fix T49105: Array modifier displayed in Edit mode crashes on selection, with End Cap enabled.

Origindex can be invalid, code was not fully protected against it...
This commit is contained in:
Bastien Montagne 2016-08-19 17:00:34 +02:00
parent 33fbf9b7e0
commit 62e3849f40
Notes: blender-bot 2023-02-14 08:49:53 +01:00
Referenced by issue #49105, Array modifier displayed in Edit mode crashes with End Cap enabled
1 changed files with 14 additions and 10 deletions

View File

@ -687,20 +687,24 @@ static void cdDM_drawMappedFaces(
const int orig = (index_mp_to_orig) ? index_mp_to_orig[i] : i;
bool is_hidden;
if (use_hide) {
if (flag & DM_DRAW_SELECT_USE_EDITMODE) {
BMFace *efa = BM_face_at_index(bm, orig);
is_hidden = BM_elem_flag_test(efa, BM_ELEM_HIDDEN) != 0;
if (orig != ORIGINDEX_NONE) {
if (use_hide) {
if (flag & DM_DRAW_SELECT_USE_EDITMODE) {
BMFace *efa = BM_face_at_index(bm, orig);
is_hidden = BM_elem_flag_test(efa, BM_ELEM_HIDDEN) != 0;
}
else {
is_hidden = (me->mpoly[orig].flag & ME_HIDE) != 0;
}
if (!is_hidden) {
GPU_select_index_get(orig + 1, &selcol);
}
}
else {
is_hidden = (me->mpoly[orig].flag & ME_HIDE) != 0;
}
if ((orig != ORIGINDEX_NONE) && !is_hidden)
GPU_select_index_get(orig + 1, &selcol);
}
}
else if (orig != ORIGINDEX_NONE)
GPU_select_index_get(orig + 1, &selcol);
for (j = 0; j < mpoly->totloop; j++)
fi_map[start_element++] = selcol;