[New-bugs-announce] [issue26168] Py_BuildValue may leak 'N' arguments on PyTuple_New failure
squidevil
report at bugs.python.org
Wed Jan 20 13:26:25 EST 2016
New submission from squidevil:
Expected behavior:
Calling Py_BuildValue with a 'N' argument should take ownership of the N object, and on failure (returns NULL), call Py_DECREF() on any N argument. The documentation explicitly says that this is the intended usage:
"N": Same as "O", except it doesn't increment the reference count on the object. Useful when the object is created by a call to an object constructor in the argument list.
Actual behavior:
N objects appear to be abandoned/leaked in some cases.
Example: PyBuildValue("iN", 0, obj);
* calls _Py_BuildValue_SizeT via macro
* calls va_build_value (in modsupport.c)
* calls do_mktuple [0]
* [0] first calls v = PyTuple_New(n=2). If this fails, it returns NULL, leaking obj.
* if [0] creates the tuple v, then it goes on to populate the values in the tuple.
* [0] calls do_mkvalue() to create the "i=0" object. If this fails, obj is never Py_DECREF()'ed.
Many other leaks are possible, as long as at least one allocation occurs prior to the processing of the N arguments.
----------
components: Interpreter Core
messages: 258708
nosy: squidevil
priority: normal
severity: normal
status: open
title: Py_BuildValue may leak 'N' arguments on PyTuple_New failure
type: resource usage
versions: Python 2.7
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue26168>
_______________________________________
More information about the New-bugs-announce
mailing list