- PyInt_AsLong() was called on a possibly NULL object, this may be
authorDaniel Dunbar <daniel@zuster.org>
Wed, 5 May 2004 03:22:22 +0000 (03:22 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 5 May 2004 03:22:22 +0000 (03:22 +0000)
    a checked error but is no good anyway
 - Bone_dealloc free'd Blender's actual copy of the Bone! AGH!!!!
 - On syntax errors the python global dictionary was being free'd
    twice. AGH!!! again!

Can someone from the Python team please audit this.

source/blender/python/BPY_interface.c
source/blender/python/api2_2x/Bone.c

index 8d7d8bd91fb6fab2edb4ab9422c267767d7c6365..b549b817587c99d587d192d92a2a92c645c851ba 100644 (file)
@@ -339,8 +339,12 @@ void BPY_Err_Handle(char *script_name)
                PyErr_Restore(exception, err, tb); /* takes away reference! */
                PyErr_Print();
                v = PyObject_GetAttrString(err, "lineno");
-               g_script_error.lineno = PyInt_AsLong(v);
-               Py_XDECREF(v);
+               if (v) {
+                       g_script_error.lineno = PyInt_AsLong(v);
+                       Py_DECREF(v);
+               } else {
+                       g_script_error.lineno = -1;
+               }
                /* this avoids an abort in Python 2.3's garbage collecting: */
                PyErr_Clear(); 
                return;
@@ -445,6 +449,7 @@ int BPY_txt_do_python_Text(struct Text* text)
 
                BPY_Err_Handle(GetName(text));
                ReleaseGlobalDictionary(py_dict);
+               script->py_globaldict = NULL;
                free_libblock(&G.main->script, script);
                //BPY_end_python();
                //BPY_start_python();
index 539d2213547c3c13dd841035e29d7a1fddf78247..99246707561e7015e95b283c4b47783fe6fa0752 100644 (file)
@@ -1067,7 +1067,6 @@ Bone_setPose (BPy_Bone *self, PyObject *args)
 static void
 Bone_dealloc (BPy_Bone * self)
 {
-       MEM_freeN(self->bone);
     PyObject_DEL (self);
 }