Commit a647a709 authored by Raymond Hettinger's avatar Raymond Hettinger

Fix leak discovered in test_new by Michael Hudson.

Will backport to 2.3.1
parent 3bc7c92c
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment