Revision: 19277
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19277
Author:   kjym3
Date:     2009-03-13 20:27:00 +0100 (Fri, 13 Mar 2009)

Log Message:
-----------
Fixed memory leaks in passing vectors from Python to C++.

Modified Paths:
--------------
    
branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.cpp

Modified: 
branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.cpp
===================================================================
--- 
branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.cpp
  2009-03-13 19:24:05 UTC (rev 19276)
+++ 
branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.cpp
  2009-03-13 19:27:00 UTC (rev 19277)
@@ -332,24 +332,49 @@
 }
 
 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);
 }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to