diff options
author | Raymond Hettinger <python@rcn.com> | 2004-06-13 15:36:56 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-06-13 15:36:56 (GMT) |
commit | de72eddf69e5ea6dbd3591ddfef5602b5b455942 (patch) | |
tree | 96f02aa789fca9d23f22ca42bc47f062a9c621fc | |
parent | bb6b7346cedbabb9cb0d2ad283fb598a2c8d9b72 (diff) | |
download | cpython-de72eddf69e5ea6dbd3591ddfef5602b5b455942.zip cpython-de72eddf69e5ea6dbd3591ddfef5602b5b455942.tar.gz cpython-de72eddf69e5ea6dbd3591ddfef5602b5b455942.tar.bz2 |
Fixup error exits in nlargest() and nsmallest().
-rw-r--r-- | Modules/_heapqmodule.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 61ee413..8074bb1 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -230,13 +230,17 @@ nlargest(PyObject *self, PyObject *args) return NULL; heap = PyList_New(0); - if (it == NULL) + if (heap == NULL) goto fail; for (i=0 ; i<n ; i++ ){ elem = PyIter_Next(it); - if (elem == NULL) - goto sortit; + if (elem == NULL) { + if (PyErr_Occurred()) + goto fail; + else + goto sortit; + } if (PyList_Append(heap, elem) == -1) { Py_DECREF(elem); goto fail; @@ -271,11 +275,11 @@ nlargest(PyObject *self, PyObject *args) sol = PyList_GET_ITEM(heap, 0); } sortit: - Py_DECREF(it); if (PyList_Sort(heap) == -1) goto fail; if (PyList_Reverse(heap) == -1) goto fail; + Py_DECREF(it); return heap; fail: @@ -385,13 +389,17 @@ nsmallest(PyObject *self, PyObject *args) return NULL; heap = PyList_New(0); - if (it == NULL) + if (heap == NULL) goto fail; for (i=0 ; i<n ; i++ ){ elem = PyIter_Next(it); - if (elem == NULL) - goto sortit; + if (elem == NULL) { + if (PyErr_Occurred()) + goto fail; + else + goto sortit; + } if (PyList_Append(heap, elem) == -1) { Py_DECREF(elem); goto fail; @@ -429,9 +437,9 @@ nsmallest(PyObject *self, PyObject *args) } sortit: - Py_DECREF(it); if (PyList_Sort(heap) == -1) goto fail; + Py_DECREF(it); return heap; fail: |