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:
Brecht Van Lommel
2014-01-29 20:28:18 +01:00
parent 77089a3bf2
commit dd684f5a04

View File

@@ -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;
}