diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-03-30 06:59:32 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-03-30 06:59:32 +0400 |
commit | 70162a4abd61df29f8ee451d94eeee6315d6155f (patch) | |
tree | 11a8ce3e4a87f6c151430ff755ed4f0aaa2c6af8 /source | |
parent | 77e3eac3897975a82e1c68468002a5eb0f00a8b5 (diff) |
fix [#26682] Accessing weight sometimes crashes blender
also replace object type check from vgroup_edit_lattice() with an assert since all callers check for lattice type.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/lattice.c | 13 | ||||
-rw-r--r-- | source/blender/editors/object/object_vgroup.c | 25 |
2 files changed, 19 insertions, 19 deletions
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c index f66afff0741..9d93bb1c25d 100644 --- a/source/blender/blenkernel/intern/lattice.c +++ b/source/blender/blenkernel/intern/lattice.c @@ -1031,13 +1031,8 @@ void lattice_calc_modifiers(Scene *scene, Object *ob) struct MDeformVert* lattice_get_deform_verts(struct Object *oblatt) { - if(oblatt->type == OB_LATTICE) - { - Lattice *lt = (Lattice*)oblatt->data; - if(lt->editlatt) lt= lt->editlatt->latt; - return lt->dvert; - } - - return NULL; + Lattice *lt = (Lattice*)oblatt->data; + BLI_assert(oblatt->type == OB_LATTICE); + if(lt->editlatt) lt= lt->editlatt->latt; + return lt->dvert; } - diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index a724e5850ec..76c917291a8 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -80,12 +80,9 @@ static void vgroup_delete_object_mode(Object *ob, bDeformGroup *dg); static Lattice *vgroup_edit_lattice(Object *ob) { - if(ob->type==OB_LATTICE) { - Lattice *lt= ob->data; - return (lt->editlatt)? lt->editlatt->latt: lt; - } - - return NULL; + Lattice *lt= ob->data; + BLI_assert(ob->type==OB_LATTICE); + return (lt->editlatt)? lt->editlatt->latt: lt; } int ED_vgroup_object_is_edit_mode(Object *ob) @@ -511,7 +508,7 @@ void ED_vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum) static float get_vert_def_nr(Object *ob, int def_nr, int vertnum) { - MDeformVert *dvert= NULL; + MDeformVert *dvert; EditVert *eve; Mesh *me; int i; @@ -526,14 +523,22 @@ static float get_vert_def_nr(Object *ob, int def_nr, int vertnum) dvert= CustomData_em_get(&me->edit_mesh->vdata, eve->data, CD_MDEFORMVERT); vertnum= 0; } - else + else { + if(vertnum >= me->totvert) { + return 0.0f; + } dvert = me->dvert; + } } else if(ob->type==OB_LATTICE) { Lattice *lt= vgroup_edit_lattice(ob); - - if(lt->dvert) + + if(lt->dvert) { + if(vertnum >= lt->pntsu*lt->pntsv*lt->pntsw) { + return 0.0f; + } dvert = lt->dvert; + } } if(dvert==NULL) |