[Bf-blender-cvs] [dd684f5] master: Fix T38400: crash in image_listener accessing deleted object.

Brecht Van Lommel noreply at git.blender.org
Wed Jan 29 20:35:46 CET 2014


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




More information about the Bf-blender-cvs mailing list