From a8bc1f33974ca4a32b597cb1e0a63b8b3c5cb641 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 28 May 2007 16:49:48 +0000 Subject: 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. --- source/blender/blenkernel/intern/mesh.c | 4 +++- source/blender/python/api2_2x/Mesh.c | 4 ++++ source/blender/src/editobject.c | 7 +++++-- 3 files changed, 12 insertions(+), 3 deletions(-) (limited to 'source') 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) -- cgit v1.2.3