From 37a724d718072e0cdb7b9e773a7c0b9461b3eba1 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 15 Sep 2003 21:43:16 +0000 Subject: [PATCH] Fix leak discovered in test_new by Michael Hudson. Will backport to 2.3.1 --- Python/compile.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/Python/compile.c b/Python/compile.c index 69a07af31d..f94a3ac6f4 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -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 -- 2.50.1