From: Inada Naoki Date: Thu, 3 Mar 2022 05:30:58 +0000 (+0900) Subject: dict: Fix refleak (GH-31650) X-Git-Tag: v3.11.0a6~37 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3241cba4ec55ef0b9e73bf7a5a77ef29ae4b8756;p=thirdparty%2FPython%2Fcpython.git dict: Fix refleak (GH-31650) --- diff --git a/Objects/dictobject.c b/Objects/dictobject.c index abe455e4ae03..d8bf164f98ee 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -1523,12 +1523,16 @@ dictresize(PyDictObject *mp, uint8_t log2_newsize, int unicode) // We can not use free_keys_object here because key's reference // are moved already. - if (oldkeys != Py_EMPTY_KEYS) { - assert(oldkeys->dk_kind != DICT_KEYS_SPLIT); - assert(oldkeys->dk_refcnt == 1); #ifdef Py_REF_DEBUG - _Py_RefTotal--; + _Py_RefTotal--; #endif + if (oldkeys == Py_EMPTY_KEYS) { + oldkeys->dk_refcnt--; + assert(oldkeys->dk_refcnt > 0); + } + else { + assert(oldkeys->dk_kind != DICT_KEYS_SPLIT); + assert(oldkeys->dk_refcnt == 1); #if PyDict_MAXFREELIST > 0 struct _Py_dict_state *state = get_dict_state(); #ifdef Py_DEBUG