diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-01-29 23:28:18 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-01-29 23:29:30 +0400 |
commit | dd684f5a0414e9f2882a4861de489e50ea1ddb2e (patch) | |
tree | 69c108bf3747e1f2bd8f8ea05d478c23dd8b5746 /source/blender/editors/space_image | |
parent | 77089a3bf20319be87a434750656206449c04dbc (diff) |
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.
Diffstat (limited to 'source/blender/editors/space_image')
-rw-r--r-- | source/blender/editors/space_image/space_image.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index 2939e4987d7..2197226beb2 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -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; } |