From d6a356209abd026b41245ad76ba3a374ab0c60db Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 26 Sep 2017 09:11:34 +0300 Subject: [PATCH] [3.6] bpo-31579: Fixed a possible leak in enumerate() with large indices. (GH-3753). (#3760) (cherry picked from commit 0e950dd22b075b4809c84afda8aede02b76ac0fa) --- Objects/enumobject.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Objects/enumobject.c b/Objects/enumobject.c index dae166d5ad..b92b8987fb 100644 --- a/Objects/enumobject.c +++ b/Objects/enumobject.c @@ -87,19 +87,25 @@ enum_next_long(enumobject *en, PyObject* next_item) if (en->en_longindex == NULL) { en->en_longindex = PyLong_FromSsize_t(PY_SSIZE_T_MAX); - if (en->en_longindex == NULL) + if (en->en_longindex == NULL) { + Py_DECREF(next_item); return NULL; + } } if (one == NULL) { one = PyLong_FromLong(1); - if (one == NULL) + if (one == NULL) { + Py_DECREF(next_item); return NULL; + } } next_index = en->en_longindex; assert(next_index != NULL); stepped_up = PyNumber_Add(next_index, one); - if (stepped_up == NULL) + if (stepped_up == NULL) { + Py_DECREF(next_item); return NULL; + } en->en_longindex = stepped_up; if (result->ob_refcnt == 1) { -- 2.40.0