]> granicus.if.org Git - python/commit
Crashers of the day: Py_CLEAR must be used when there is a chance that the
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Sat, 16 Feb 2008 14:34:57 +0000 (14:34 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Sat, 16 Feb 2008 14:34:57 +0000 (14:34 +0000)
commit588ff93f1383436694e26c962528291913012296
tree21b15b95feb36e0042c50be5ff650e002c66d30e
parent943321d586f3ce1d084995c66fe85137d8b8ebf8
Crashers of the day: Py_CLEAR must be used when there is a chance that the
function can be called recursively.
This was discussed in issue1020188.

In python codebase, all occurrences of Py_[X]DECREF(xxx->yyy) are suspect,
except when they appear in tp_new or tp_dealloc functions, or when
the member cannot be of a user-defined class.
Note that tp_init is not safe.

I do have a (crashing) example for every changed line.
Is it worth adding them to the test suite?

Example:

class SpecialStr(str):
    def __del__(self):
        s.close()

import cStringIO
s = cStringIO.StringIO(SpecialStr("text"))
s.close() # Segfault
Modules/_struct.c
Modules/cStringIO.c