From: Benjamin Peterson Date: Thu, 4 Jun 2015 19:34:20 +0000 (-0500) Subject: fix refleak when keys() fails X-Git-Tag: v3.5.0b3~95 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2ad80f53c1a9abf1d3d869a5e7902f30086f0df1;p=thirdparty%2FPython%2Fcpython.git fix refleak when keys() fails --- diff --git a/Objects/odictobject.c b/Objects/odictobject.c index 313b21ae2d54..13ffdf153603 100644 --- a/Objects/odictobject.c +++ b/Objects/odictobject.c @@ -2427,12 +2427,16 @@ mutablemapping_update(PyObject *self, PyObject *args, PyObject *kwargs) else if (PyObject_HasAttrString(other, "keys")) { /* never fails */ PyObject *keys, *iterator, *key; keys = PyObject_CallMethod(other, "keys", NULL); - if (keys == NULL) + if (keys == NULL) { + Py_DECREF(other); return NULL; + } iterator = PyObject_GetIter(keys); Py_DECREF(keys); - if (iterator == NULL) + if (iterator == NULL) { + Py_DECREF(other); return NULL; + } while (res == 0 && (key = PyIter_Next(iterator))) { PyObject *value = PyObject_GetItem(other, key); if (value != NULL) {