diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2009-03-13 22:27:00 +0300 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2009-03-13 22:27:00 +0300 |
commit | c8ac7723d61a4368905accd990f4e6b117cb7a16 (patch) | |
tree | 5b5318100c4a42c1c31d115284615bc7de042c71 /source/blender/freestyle/intern/python/BPy_Convert.cpp | |
parent | 2fbcd6c4bdc48817e7f27e567cbf81d2545b1a49 (diff) |
Fixed memory leaks in passing vectors from Python to C++.
Diffstat (limited to 'source/blender/freestyle/intern/python/BPy_Convert.cpp')
-rw-r--r-- | source/blender/freestyle/intern/python/BPy_Convert.cpp | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/source/blender/freestyle/intern/python/BPy_Convert.cpp b/source/blender/freestyle/intern/python/BPy_Convert.cpp index b44626a9930..4ae6ca53c89 100644 --- a/source/blender/freestyle/intern/python/BPy_Convert.cpp +++ b/source/blender/freestyle/intern/python/BPy_Convert.cpp @@ -332,24 +332,49 @@ Nature::EdgeNature EdgeNature_from_BPy_Nature( PyObject* obj ) { } Vec2f * Vec2f_ptr_from_Vector( PyObject* obj ) { - float x = PyFloat_AsDouble( PyObject_GetAttrString(obj,"x") ); - float y = PyFloat_AsDouble( PyObject_GetAttrString(obj,"y") ); + PyObject *v; + if (!VectorObject_Check(obj) || ((VectorObject *)obj)->size != 2) + return NULL; + v = PyObject_GetAttrString(obj,"x"); + float x = PyFloat_AsDouble( v ); + Py_DECREF( v ); + v = PyObject_GetAttrString(obj,"y"); + float y = PyFloat_AsDouble( v ); + Py_DECREF( v ); return new Vec2f(x,y); } Vec3f * Vec3f_ptr_from_Vector( PyObject* obj ) { - float x = PyFloat_AsDouble( PyObject_GetAttrString(obj,"x") ); - float y = PyFloat_AsDouble( PyObject_GetAttrString(obj,"y") ); - float z = PyFloat_AsDouble( PyObject_GetAttrString(obj,"z") ); + PyObject *v; + if (!VectorObject_Check(obj) || ((VectorObject *)obj)->size != 3) + return NULL; + v = PyObject_GetAttrString(obj,"x"); + float x = PyFloat_AsDouble( v ); + Py_DECREF( v ); + v = PyObject_GetAttrString(obj,"y"); + float y = PyFloat_AsDouble( v ); + Py_DECREF( v ); + v = PyObject_GetAttrString(obj,"z"); + float z = PyFloat_AsDouble( v ); + Py_DECREF( v ); return new Vec3f(x,y,z); } Vec3r * Vec3r_ptr_from_Vector( PyObject* obj ) { - double x = PyFloat_AsDouble( PyObject_GetAttrString(obj,"x") ); - double y = PyFloat_AsDouble( PyObject_GetAttrString(obj,"y") ); - double z = PyFloat_AsDouble( PyObject_GetAttrString(obj,"z") ); + PyObject *v; + if (!VectorObject_Check(obj) || ((VectorObject *)obj)->size != 3) + return NULL; + v = PyObject_GetAttrString(obj,"x"); + double x = PyFloat_AsDouble( v ); + Py_DECREF( v ); + v = PyObject_GetAttrString(obj,"y"); + double y = PyFloat_AsDouble( v ); + Py_DECREF( v ); + v = PyObject_GetAttrString(obj,"z"); + double z = PyFloat_AsDouble( v ); + Py_DECREF( v ); return new Vec3r(x,y,z); } |