From: Benjamin Peterson Date: Mon, 4 Mar 2013 14:47:50 +0000 (-0500) Subject: fix possible setdefault refleak (closes #17328) X-Git-Tag: v3.3.1rc1~97 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b1efa53662385ba64289d9fe6fb8ca5b431c4119;p=python fix possible setdefault refleak (closes #17328) --- diff --git a/Misc/NEWS b/Misc/NEWS index 0b1da99048..958cc1a7d4 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 3.3.1? Core and Builtins ----------------- +- Issue #17328: Fix possible refleak in dict.setdefault. + - Issue #17223: array module: Fix a crasher when converting an array containing invalid characters (outside range [U+0000; U+10ffff]) to Unicode: repr(array), str(array) and array.tounicode(). Patch written by Manuel Jacob. diff --git a/Objects/dictobject.c b/Objects/dictobject.c index f4ad3dccd4..8c09e46f9b 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -2230,14 +2230,14 @@ dict_setdefault(register PyDictObject *mp, PyObject *args) return NULL; val = *value_addr; if (val == NULL) { - Py_INCREF(failobj); - Py_INCREF(key); if (mp->ma_keys->dk_usable <= 0) { /* Need to resize. */ if (insertion_resize(mp) < 0) return NULL; ep = find_empty_slot(mp, key, hash, &value_addr); } + Py_INCREF(failobj); + Py_INCREF(key); MAINTAIN_TRACKING(mp, key, failobj); ep->me_key = key; ep->me_hash = hash;