[Python-Dev] [Python 2.4] PyInt_FromLong returning NULL
Jim Fulton
jim at zope.com
Tue Dec 7 20:19:43 CET 2004
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:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Python-Dev
mailing list