[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29029] trunk/blender/source/blender/ blenkernel/intern/object.c: Fix #22422: Adding a new shape key with unchecked 'Relative' checkbox crashes blender

Sergey Sharybin g.ulairi at gmail.com
Thu May 27 16:00:33 CEST 2010


Revision: 29029
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29029
Author:   nazgul
Date:     2010-05-27 16:00:32 +0200 (Thu, 27 May 2010)

Log Message:
-----------
Fix #22422: Adding a new shape key with unchecked 'Relative' checkbox crashes blender

Reorder callning of add_keyblock and do_ob_key in insert_*key.
do_ob_key shouldn't be called for object with uninitialized key blocks.

NOTE: this commit not fixing problems with slurph

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/object.c

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2010-05-27 12:46:42 UTC (rev 29028)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2010-05-27 14:00:32 UTC (rev 29029)
@@ -2879,15 +2879,18 @@
 		newkey= 1;
 	}
 
-	kb= add_keyblock(key, name);
-
 	if(newkey || from_mix==FALSE) {
 		/* create from mesh */
+		kb= add_keyblock(key, name);
 		mesh_to_key(me, kb);
 	}
 	else {
 		/* copy from current values */
-		kb->data= do_ob_key(scene, ob);
+		float *data= do_ob_key(scene, ob);
+
+		/* create new block with prepared data */
+		kb= add_keyblock(key, name);
+		kb->data= data;
 		kb->totelem= me->totvert;
 	}
 
@@ -2907,16 +2910,20 @@
 		newkey= 1;
 	}
 
-	kb= add_keyblock(key, name);
+	if(newkey || from_mix==FALSE) {
+		kb= add_keyblock(key, name);
 
-	if(newkey || from_mix==FALSE) {
 		/* create from lattice */
 		latt_to_key(lt, kb);
 	}
 	else {
 		/* copy from current values */
+		float *data= do_ob_key(scene, ob);
+
+		/* create new block with prepared data */
+		kb= add_keyblock(key, name);
 		kb->totelem= lt->pntsu*lt->pntsv*lt->pntsw;
-		kb->data= do_ob_key(scene, ob);
+		kb->data= data;
 	}
 
 	return kb;
@@ -2936,16 +2943,19 @@
 		newkey= 1;
 	}
 
-	kb= add_keyblock(key, name);
-
 	if(newkey || from_mix==FALSE) {
 		/* create from curve */
+		kb= add_keyblock(key, name);
 		curve_to_key(cu, kb, lb);
 	}
 	else {
 		/* copy from current values */
+		float *data= do_ob_key(scene, ob);
+
+		/* create new block with prepared data */
+		kb= add_keyblock(key, name);
 		kb->totelem= count_curveverts(lb);
-		kb->data= do_ob_key(scene, ob);
+		kb->data= data;
 	}
 
 	return kb;





More information about the Bf-blender-cvs mailing list