Fix T38400: crash in image_listener accessing deleted object.
Listeners should never dereference this pointer because the object may have been deleted, it can only be used for comparisons.
This commit is contained in:
@@ -420,8 +420,9 @@ static void image_refresh(const bContext *C, ScrArea *sa)
|
||||
}
|
||||
}
|
||||
|
||||
static void image_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
|
||||
static void image_listener(bScreen *sc, ScrArea *sa, wmNotifier *wmn)
|
||||
{
|
||||
Scene *scene = sc->scene;
|
||||
SpaceImage *sima = (SpaceImage *)sa->spacedata.first;
|
||||
|
||||
/* context changes */
|
||||
@@ -510,13 +511,15 @@ static void image_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
|
||||
}
|
||||
case NC_OBJECT:
|
||||
{
|
||||
Object *ob = (Object *)wmn->reference;
|
||||
Object *ob = OBACT;
|
||||
switch (wmn->data) {
|
||||
case ND_TRANSFORM:
|
||||
case ND_MODIFIER:
|
||||
if (ob && (ob->mode & OB_MODE_EDIT) && sima->lock && (sima->flag & SI_DRAWSHADOW)) {
|
||||
ED_area_tag_refresh(sa);
|
||||
ED_area_tag_redraw(sa);
|
||||
if (ob == (Object *)wmn->reference && (ob->mode & OB_MODE_EDIT)) {
|
||||
if (sima->lock && (sima->flag & SI_DRAWSHADOW)) {
|
||||
ED_area_tag_refresh(sa);
|
||||
ED_area_tag_redraw(sa);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user