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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4