diff options
author | Campbell Barton <ideasman42@gmail.com> | 2007-05-28 20:49:48 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2007-05-28 20:49:48 +0400 |
commit | a8bc1f33974ca4a32b597cb1e0a63b8b3c5cb641 (patch) | |
tree | 7ab49b4dcf9bd3dc2d89f634ae0ae44d775e87ea /source | |
parent | 3030e93a5ba941cefde52c604d52afd4965aad6b (diff) |
fix for a crash in Blender.Mesh,
getting curve data from an object failed (with only 1 curve vertex)
Blender.Mesh didnt check this and crashed.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 4 | ||||
-rw-r--r-- | source/blender/python/api2_2x/Mesh.c | 4 | ||||
-rw-r--r-- | source/blender/src/editobject.c | 7 |
3 files changed, 12 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 93a3981c4a9..278d49e2198 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -808,6 +808,7 @@ void mball_to_mesh(ListBase *lb, Mesh *me) } } +/* this may fail replacing ob->data, be sure to check ob->type */ void nurbs_to_mesh(Object *ob) { Object *ob1; @@ -847,7 +848,8 @@ void nurbs_to_mesh(Object *ob) dl= dl->next; } if(totvert==0) { - error("can't convert"); + /* error("can't convert"); */ + /* Make Sure you check ob->data is a curve */ return; } diff --git a/source/blender/python/api2_2x/Mesh.c b/source/blender/python/api2_2x/Mesh.c index 30b67426e6a..b64259553bf 100644 --- a/source/blender/python/api2_2x/Mesh.c +++ b/source/blender/python/api2_2x/Mesh.c @@ -5704,6 +5704,10 @@ static PyObject *Mesh_getFromObject( BPy_Mesh * self, PyObject * args ) nurbs_to_mesh( tmpobj ); tmpmesh = tmpobj->data; free_libblock_us( &G.main->object, tmpobj ); + + if (ob->type != OB_MESH) + return EXPP_ReturnPyObjError( PyExc_RuntimeError, + "cant convert curve to mesh. Does the curve have any segments?" ); break; case OB_MBALL: /* metaballs don't have modifiers, so just convert to mesh */ diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c index 0c42b4c14aa..d362605d63c 100644 --- a/source/blender/src/editobject.c +++ b/source/blender/src/editobject.c @@ -2527,8 +2527,11 @@ static void curvetomesh(Object *ob) if(dl==0) makeDispListCurveTypes(ob, 0); /* force creation */ nurbs_to_mesh(ob); /* also does users */ - - object_free_modifiers(ob); + if (ob->type != OB_MESH) { + error("can't convert curve to mesh"); + } else { + object_free_modifiers(ob); + } } void convertmenu(void) |