[Bf-blender-cvs] [c2765bd] hair_immediate_fixes: Fix for invalid ID access during versioning.

Lukas Tönne noreply at git.blender.org
Fri Oct 10 14:56:18 CEST 2014


Commit: c2765bd99f6aae16ed73de21e84e24484e470892
Author: Lukas Tönne
Date:   Fri Oct 10 14:55:20 2014 +0200
Branches: hair_immediate_fixes
https://developer.blender.org/rBc2765bd99f6aae16ed73de21e84e24484e470892

Fix for invalid ID access during versioning.

For now is fixed by doing a versioning hack in the lib_link function,
but would be nicer to avoid this altogether for forward compatibility.

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

M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_270.c

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

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index f2e98bf..9acd61e 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -124,6 +124,7 @@
 #include "BKE_group.h"
 #include "BKE_library.h" // for which_libbase
 #include "BKE_idcode.h"
+#include "BKE_key.h"
 #include "BKE_material.h"
 #include "BKE_main.h" // for Main
 #include "BKE_mesh.h" // for ME_ defines (patching)
@@ -3071,6 +3072,12 @@ static void lib_link_key(FileData *fd, Main *main)
 			
 			key->ipo = newlibadr_us(fd, key->id.lib, key->ipo); // XXX deprecated - old animation system
 			key->owner.id = newlibadr(fd, key->id.lib, key->owner.id);
+			/* versioning: initialize owner */
+			if (!key->owner.id && key->from) {
+				ID *id = newlibadr(fd, key->id.lib, key->from);
+				BKE_key_set_from_id(key, id);
+				key->from = NULL;
+			}
 			
 			key->id.flag -= LIB_NEED_LINK;
 		}
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index a13f9f2..6e7ebe8 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -446,13 +446,6 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 		}
 	}
 	
-	if (!DNA_struct_elem_find(fd->filesdna, "Key", "KeyOwner", "owner")) {
-		Key *key;
-		for (key = main->key.first; key; key = key->id.next) {
-			BKE_key_set_from_id(key, key->from);
-		}
-	}
-
 	if (!DNA_struct_elem_find(fd->filesdna, "ParticleSystem", "float", "hair_preview_factor")) {
 		Object *ob;
 		ParticleSystem *psys;




More information about the Bf-blender-cvs mailing list