From: Raymond Hettinger Date: Tue, 5 Aug 2003 11:23:59 +0000 (+0000) Subject: SF bug #782369: Massive memory leak in array module X-Git-Tag: v2.4a1~1791 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=85004cc47d807579a475da9f4367a62eb2fd72a2;p=thirdparty%2FPython%2Fcpython.git SF bug #782369: Massive memory leak in array module Fixed leak caused by switching from PyList_GetItem to PySequence_GetItem. Added missing NULL check. Clarified code by converting an "if" to an "else if". Will backport to 2.3. --- diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index f730915151ad..228c8f4c6989 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1758,13 +1758,18 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds) for (i = 0; i < len; i++) { PyObject *v = PySequence_GetItem(initial, i); + if (v == NULL) { + Py_DECREF(a); + return NULL; + } if (setarrayitem(a, i, v) != 0) { + Py_DECREF(v); Py_DECREF(a); return NULL; } + Py_DECREF(v); } - } - if (initial != NULL && PyString_Check(initial)) { + } else if (initial != NULL && PyString_Check(initial)) { PyObject *t_initial = Py_BuildValue("(O)", initial); PyObject *v =