]> granicus.if.org Git - python/commitdiff
SF bug #782369: Massive memory leak in array module
authorRaymond Hettinger <python@rcn.com>
Tue, 5 Aug 2003 11:23:59 +0000 (11:23 +0000)
committerRaymond Hettinger <python@rcn.com>
Tue, 5 Aug 2003 11:23:59 +0000 (11:23 +0000)
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.

Modules/arraymodule.c

index f730915151add782fd4d4728eaa1d6209c2c8d7a..228c8f4c6989a31ca08cb8f6db74ce40a31dbf43 100644 (file)
@@ -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 =