Tim Peters wrote:
[Andreas Jung]
Sorry, false alarm :-( There assignment of the NULL occurs in the
if-clause of the corresponding code (I have overseen the ASSIGN
call):
Thanks for the followup!
if (! PyInt_Check(p))
{
if (PyDict_Check(p))
{
if (PyString_Check(name) ||
PyUnicode_Check(name))
{
ASSIGN(p, PyObject_GetItem(p, name));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if (p == NULL) {
puts("PyObject returned NULL");
PyErr_Clear();
}
}
else
p = PyInt_FromLong((long)1);
...doing some further investigations on that.
I note that all of this is nested inside another "if (p) {...}" block.
That implies the "p = PyInt_FromLong((long)1);" line is at least a
memory leak: it overwrites p without decref'ing p first.
The ASSIGN macro DECREFs it's first argument if it is non-NULL.
It loosly models a Python assignment, assuming that it owns the
reference to the second argument.
Jim
--
Jim Fulton mailto:[EMAIL PROTECTED] Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
_______________________________________________
Python-Dev mailing list
[EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com