Commit: dd684f5a0414e9f2882a4861de489e50ea1ddb2e
Author: Brecht Van Lommel
Date:   Wed Jan 29 20:28:18 2014 +0100
https://developer.blender.org/rBdd684f5a0414e9f2882a4861de489e50ea1ddb2e

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.

===================================================================

M       source/blender/editors/space_image/space_image.c

===================================================================

diff --git a/source/blender/editors/space_image/space_image.c 
b/source/blender/editors/space_image/space_image.c
index 2939e49..2197226 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;
                        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to