[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56296] trunk/blender/source/blender/ render/intern/source: Fix freestyle crash due to freed memory access.

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Apr 25 17:59:16 CEST 2013


Revision: 56296
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56296
Author:   blendix
Date:     2013-04-25 15:59:15 +0000 (Thu, 25 Apr 2013)
Log Message:
-----------
Fix freestyle crash due to freed memory access. The render data needs to be
freed first, and then the scene that it used.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2013-04-25 14:29:19 UTC (rev 56295)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2013-04-25 15:59:15 UTC (rev 56296)
@@ -4862,12 +4862,14 @@
 	if (re->wrld.aosphere) {
 		MEM_freeN(re->wrld.aosphere);
 		re->wrld.aosphere= NULL;
-		re->scene->world->aosphere= NULL;
+		if (re->scene)
+			re->scene->world->aosphere= NULL;
 	}
 	if (re->wrld.aotables) {
 		MEM_freeN(re->wrld.aotables);
 		re->wrld.aotables= NULL;
-		re->scene->world->aotables= NULL;
+		if (re->scene)
+			re->scene->world->aotables= NULL;
 	}
 	if (re->r.mode & R_RAYTRACE)
 		free_render_qmcsampler(re);

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2013-04-25 14:29:19 UTC (rev 56295)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2013-04-25 15:59:15 UTC (rev 56296)
@@ -1676,14 +1676,16 @@
 static void free_all_freestyle_renders(void)
 {
 	Render *re1, *freestyle_render;
+	Scene *freestyle_scene;
 	LinkData *link;
 
 	for (re1= RenderGlobal.renderlist.first; re1; re1= re1->next) {
 		for (link = (LinkData *)re1->freestyle_renders.first; link; link = link->next) {
 			if (link->data) {
 				freestyle_render = (Render *)link->data;
-				BKE_scene_unlink(&re1->freestyle_bmain, freestyle_render->scene, NULL);
+				freestyle_scene = freestyle_render->scene;
 				RE_FreeRender(freestyle_render);
+				BKE_scene_unlink(&re1->freestyle_bmain, freestyle_scene, NULL);
 			}
 		}
 		BLI_freelistN(&re1->freestyle_renders);




More information about the Bf-blender-cvs mailing list