comparison Modules/arraymodule.c @ 30077:8b7e37b5f1ee 2.3

Backport 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".
author Raymond Hettinger <python@rcn.com>
date Wed, 06 Aug 2003 06:55:09 +0000
parents 23ad8b5d7b4a
children 88c1e17ceffc 3b59fa5d25b1
comparison
equal deleted inserted replaced
30076:5b1ddc4b49b9 30077:8b7e37b5f1ee
1756 if (len > 0) { 1756 if (len > 0) {
1757 int i; 1757 int i;
1758 for (i = 0; i < len; i++) { 1758 for (i = 0; i < len; i++) {
1759 PyObject *v = 1759 PyObject *v =
1760 PySequence_GetItem(initial, i); 1760 PySequence_GetItem(initial, i);
1761 if (setarrayitem(a, i, v) != 0) { 1761 if (v == NULL) {
1762 Py_DECREF(a); 1762 Py_DECREF(a);
1763 return NULL; 1763 return NULL;
1764 } 1764 }
1765 if (setarrayitem(a, i, v) != 0) {
1766 Py_DECREF(v);
1767 Py_DECREF(a);
1768 return NULL;
1769 }
1770 Py_DECREF(v);
1765 } 1771 }
1766 } 1772 } else if (initial != NULL && PyString_Check(initial)) {
1767 if (initial != NULL && PyString_Check(initial)) {
1768 PyObject *t_initial = Py_BuildValue("(O)", 1773 PyObject *t_initial = Py_BuildValue("(O)",
1769 initial); 1774 initial);
1770 PyObject *v = 1775 PyObject *v =
1771 array_fromstring((arrayobject *)a, 1776 array_fromstring((arrayobject *)a,
1772 t_initial); 1777 t_initial);