- PyInt_AsLong() was called on a possibly NULL object, this may be

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.
This commit is contained in:
Daniel Dunbar 2004-05-05 03:22:22 +00:00
parent baa54a9a9f
commit f54160ca2f
2 changed files with 7 additions and 3 deletions

@ -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();

@ -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);
}