mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
Fix leak discovered in test_new by Michael Hudson.
Will backport to 2.3.1
This commit is contained in:
parent
1e4cf67c32
commit
37a724d718
1 changed files with 14 additions and 17 deletions
|
@ -104,6 +104,8 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kw)
|
|||
int nlocals;
|
||||
int stacksize;
|
||||
int flags;
|
||||
PyObject *co;
|
||||
PyObject *empty;
|
||||
PyObject *code;
|
||||
PyObject *consts;
|
||||
PyObject *names;
|
||||
|
@ -127,31 +129,26 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kw)
|
|||
&PyTuple_Type, &cellvars))
|
||||
return NULL;
|
||||
|
||||
if (freevars == NULL || cellvars == NULL) {
|
||||
PyObject *empty = PyTuple_New(0);
|
||||
if (empty == NULL)
|
||||
return NULL;
|
||||
if (freevars == NULL) {
|
||||
freevars = empty;
|
||||
Py_INCREF(freevars);
|
||||
}
|
||||
if (cellvars == NULL) {
|
||||
cellvars = empty;
|
||||
Py_INCREF(cellvars);
|
||||
}
|
||||
Py_DECREF(empty);
|
||||
}
|
||||
|
||||
if (!PyObject_CheckReadBuffer(code)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"bytecode object must be a single-segment read-only buffer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (PyObject *)PyCode_New(argcount, nlocals, stacksize, flags,
|
||||
empty = PyTuple_New(0);
|
||||
if (empty == NULL)
|
||||
return NULL;
|
||||
if (freevars == NULL)
|
||||
freevars = empty;
|
||||
if (cellvars == NULL)
|
||||
cellvars = empty;
|
||||
|
||||
co = (PyObject *) PyCode_New(argcount, nlocals, stacksize, flags,
|
||||
code, consts, names, varnames,
|
||||
freevars, cellvars, filename, name,
|
||||
firstlineno, lnotab);
|
||||
firstlineno, lnotab);
|
||||
Py_DECREF(empty);
|
||||
return co;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue