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

Reply via email to