Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2010-05-27 18:00:32 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2010-05-27 18:00:32 +0400
commit717701ed0f785f6452c37f412f43e08382694bc2 (patch)
tree401750f64e0b62246ed17416f0038893485c71ed /source/blender/blenkernel/intern/object.c
parent8f8c59903d30681088f29ffd82d5e80ab06e0c8d (diff)
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
Diffstat (limited to 'source/blender/blenkernel/intern/object.c')
-rw-r--r--source/blender/blenkernel/intern/object.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 24c23e5ea41..576b3481d07 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2879,15 +2879,18 @@ static KeyBlock *insert_meshkey(Scene *scene, Object *ob, char *name, int from_m
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 @@ static KeyBlock *insert_lattkey(Scene *scene, Object *ob, char *name, int from_m
newkey= 1;
}
- kb= add_keyblock(key, name);
-
if(newkey || from_mix==FALSE) {
+ kb= add_keyblock(key, name);
+
/* 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 @@ static KeyBlock *insert_curvekey(Scene *scene, Object *ob, char *name, int from_
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;