From: Petri Lehtinen Date: Mon, 24 Oct 2011 17:59:29 +0000 (+0300) Subject: Issue #13018: Fix reference leaks in error paths in dictobject.c. X-Git-Tag: v2.7.3rc1~382 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8ffbab8d02ca6aa925a8f339b71c6677b9c49fb6;p=thirdparty%2FPython%2Fcpython.git Issue #13018: Fix reference leaks in error paths in dictobject.c. Patch by Suman Saha. --- diff --git a/Misc/NEWS b/Misc/NEWS index 7b793b26908b..7741e2cb8aaf 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -9,6 +9,9 @@ What's New in Python 2.7.3? Core and Builtins ----------------- +- Issue #13018: Fix reference leaks in error paths in dictobject.c. + Patch by Suman Saha. + - Issue #12604: VTRACE macro expanded to no-op in _sre.c to avoid compiler warnings. Patch by Josh Triplett and Petri Lehtinen. diff --git a/Objects/dictobject.c b/Objects/dictobject.c index e8f8b4a8463f..f2ebf456b469 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -1335,14 +1335,18 @@ dict_fromkeys(PyObject *cls, PyObject *args) PyObject *key; long hash; - if (dictresize(mp, Py_SIZE(seq))) + if (dictresize(mp, Py_SIZE(seq))) { + Py_DECREF(d); return NULL; + } while (_PyDict_Next(seq, &pos, &key, &oldvalue, &hash)) { Py_INCREF(key); Py_INCREF(value); - if (insertdict(mp, key, hash, value)) + if (insertdict(mp, key, hash, value)) { + Py_DECREF(d); return NULL; + } } return d; } @@ -1353,14 +1357,18 @@ dict_fromkeys(PyObject *cls, PyObject *args) PyObject *key; long hash; - if (dictresize(mp, PySet_GET_SIZE(seq))) + if (dictresize(mp, PySet_GET_SIZE(seq))) { + Py_DECREF(d); return NULL; + } while (_PySet_NextEntry(seq, &pos, &key, &hash)) { Py_INCREF(key); Py_INCREF(value); - if (insertdict(mp, key, hash, value)) + if (insertdict(mp, key, hash, value)) { + Py_DECREF(d); return NULL; + } } return d; }