[Bf-blender-cvs] [e34ade4] master: Fix T48412: Blender 2.77a crashes on Undo in some specific multi-level linked libraries cases.

Bastien Montagne noreply at git.blender.org
Tue Jun 21 16:22:34 CEST 2016


Commit: e34ade4eb3b28a44d7bb1685a0fba32937c8982f
Author: Bastien Montagne
Date:   Tue Jun 21 16:12:33 2016 +0200
Branches: master
https://developer.blender.org/rBe34ade4eb3b28a44d7bb1685a0fba32937c8982f

Fix T48412: Blender 2.77a crashes on Undo in some specific multi-level linked libraries cases.

Good old dead-brain stupid error when iterating over a linked list from which you remove some items...

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

M	source/blender/blenloader/intern/readblenentry.c

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

diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c
index 3cae95d..b5ba987 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblenentry.c
@@ -411,11 +411,12 @@ BlendFileData *BLO_read_from_memfile(Main *oldmain, const char *filename, MemFil
 			/* Even though directly used libs have been already moved to new main, indirect ones have not.
 			 * This is a bit annoying, but we have no choice but to keep them all for now - means some now unused
 			 * data may remain in memory, but think we'll have to live with it. */
-			Main *libmain;
+			Main *libmain, *libmain_next;
 			Main *newmain = bfd->main;
 			ListBase new_mainlist = {newmain, newmain};
 
-			for (libmain = oldmain->next; libmain; libmain = libmain->next) {
+			for (libmain = oldmain->next; libmain; libmain = libmain_next) {
+				libmain_next = libmain->next;
 				/* Note that LIB_INDIRECT does not work with libraries themselves, so we use non-NULL parent
 				 * to detect indirect-linked ones... */
 				if (libmain->curlib && (libmain->curlib->parent != NULL)) {




More information about the Bf-blender-cvs mailing list