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:
authorCampbell Barton <ideasman42@gmail.com>2012-01-24 03:53:21 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-01-24 03:53:21 +0400
commit8c6120e5ffc954c0aae4165d2cf55b6b9829383c (patch)
tree7ad8286f108c48c34aedc5f6eaf6e94d538ddaf7 /source/blender
parent7138e6aa9ca054c7220c85b22352487368a76f97 (diff)
fix for crash with mesh undo with shape keys
'undomesh' was also used in confusing way (relied on mesh being first member).
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/key.c4
-rw-r--r--source/blender/editors/mesh/bmeshutils.c22
2 files changed, 14 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 670ffd2b7c6..2f05d14bdd5 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -198,7 +198,9 @@ Key *copy_key_nolib(Key *key)
if(key==0) return 0;
keyn= MEM_dupallocN(key);
-
+
+ keyn->adt = NULL;
+
BLI_duplicatelist(&keyn->block, &key->block);
kb= key->block.first;
diff --git a/source/blender/editors/mesh/bmeshutils.c b/source/blender/editors/mesh/bmeshutils.c
index ebeb4d7c044..f495626a4c3 100644
--- a/source/blender/editors/mesh/bmeshutils.c
+++ b/source/blender/editors/mesh/bmeshutils.c
@@ -551,7 +551,7 @@ static void *getEditMesh(bContext *C)
typedef struct undomesh {
Mesh me;
int selectmode;
- char obname[64];
+ char obname[MAX_ID_NAME-2];
} undomesh;
/*undo simply makes copies of a bmesh*/
@@ -560,11 +560,11 @@ static void *editbtMesh_to_undoMesh(void *emv, void *obdata)
BMEditMesh *em = emv;
Mesh *obme = obdata;
- undomesh *me = MEM_callocN(sizeof(undomesh), "undo Mesh");
- strcpy(me->obname, em->bm->ob->id.name+2);
+ undomesh *um = MEM_callocN(sizeof(undomesh), "undo Mesh");
+ BLI_strncpy(um->obname, em->bm->ob->id.name+2, sizeof(um->obname));
/*make sure shape keys work*/
- me->me.key = obme->key ? copy_key_nolib(obme->key) : NULL;
+ um->me.key = obme->key ? copy_key_nolib(obme->key) : NULL;
#ifdef BMESH_EM_UNDO_RECALC_TESSFACE_WORKAROUND
@@ -574,32 +574,32 @@ static void *editbtMesh_to_undoMesh(void *emv, void *obdata)
#endif
- BMO_CallOpf(em->bm, "bmesh_to_mesh mesh=%p notesselation=%i", me, 1);
- me->selectmode = em->selectmode;
+ BMO_CallOpf(em->bm, "bmesh_to_mesh mesh=%p notesselation=%i", &um->me, 1);
+ um->selectmode = em->selectmode;
- return me;
+ return um;
}
static void undoMesh_to_editbtMesh(void *umv, void *emv, void *UNUSED(obdata))
{
BMEditMesh *em = emv, *em2;
Object *ob;
- undomesh *me = umv;
+ undomesh *um = umv;
BMesh *bm;
int allocsize[4] = {512, 512, 2048, 512};
- ob = (Object*)find_id("OB", me->obname);
+ ob = (Object*)find_id("OB", um->obname);
ob->shapenr = em->bm->shapenr;
BMEdit_Free(em);
bm = BM_Make_Mesh(ob, allocsize);
- BMO_CallOpf(bm, "mesh_to_bmesh mesh=%p object=%p set_shapekey=%i", me, ob, 0);
+ BMO_CallOpf(bm, "mesh_to_bmesh mesh=%p object=%p set_shapekey=%i", &um->me, ob, 0);
em2 = BMEdit_Create(bm, TRUE);
*em = *em2;
- em->selectmode = me->selectmode;
+ em->selectmode = um->selectmode;
MEM_freeN(em2);
}