From 8d8a08c7819cb48deb6c1a6522ce0b3c6a080847 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Fri, 26 Jun 2026 11:35:50 +0300 Subject: [PATCH] gh-152254: Fix a crash in `PyObject_ClearManagedDict` under memory pressure --- .../2026-06-26-11-34-50.gh-issue-152254.yK6TGp.rst | 2 ++ Objects/dictobject.c | 1 + 2 files changed, 3 insertions(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-06-26-11-34-50.gh-issue-152254.yK6TGp.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-06-26-11-34-50.gh-issue-152254.yK6TGp.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-26-11-34-50.gh-issue-152254.yK6TGp.rst new file mode 100644 index 00000000000000..206b88a2affb2b --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-26-11-34-50.gh-issue-152254.yK6TGp.rst @@ -0,0 +1,2 @@ +Fix a crash during the clean up of managed dict objects under a memory +pressure in :c:func:`PyObject_ClearManagedDict`. diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 4b1a7bfe39d3a5..434cad0d12c2d7 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -7986,6 +7986,7 @@ PyObject_ClearManagedDict(PyObject *obj) /* Clear the dict */ Py_BEGIN_CRITICAL_SECTION(dict); PyDictKeysObject *oldkeys = dict->ma_keys; + ensure_shared_on_resize(dict); set_keys(dict, Py_EMPTY_KEYS); dict->ma_values = NULL; dictkeys_decref(oldkeys, IS_DICT_SHARED(dict));