Mercurial > cpython-lru_cache-weakref
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); |
