From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Tue, 24 Jun 2025 16:58:57 +0000 (+0200) Subject: [3.14] gh-135878: Fix crash in `types.SimpleNamespace.__repr__` (GH-135889) (#135896) X-Git-Tag: v3.14.0b4~110 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=88c55528f5a694e8340f2541de7a11265589fbed;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-135878: Fix crash in `types.SimpleNamespace.__repr__` (GH-135889) (#135896) gh-135878: Fix crash in `types.SimpleNamespace.__repr__` (GH-135889) (cherry picked from commit b3ab94acd308591bbdf264f1722fedc7ee25d6fa) Co-authored-by: sobolevn Co-authored-by: Peter Bierma --- diff --git a/Misc/NEWS.d/next/Library/2025-06-24-14-43-24.gh-issue-135878.Db4roX.rst b/Misc/NEWS.d/next/Library/2025-06-24-14-43-24.gh-issue-135878.Db4roX.rst new file mode 100644 index 000000000000..969cf2dfa408 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-06-24-14-43-24.gh-issue-135878.Db4roX.rst @@ -0,0 +1,3 @@ +Fixes a crash of :class:`types.SimpleNamespace` on :term:`free threading` builds, +when several threads were calling its :meth:`~object.__repr__` method at the +same time. diff --git a/Objects/namespaceobject.c b/Objects/namespaceobject.c index caebe6bf5435..0fc2bcea4cb0 100644 --- a/Objects/namespaceobject.c +++ b/Objects/namespaceobject.c @@ -124,9 +124,10 @@ namespace_repr(PyObject *ns) if (PyUnicode_Check(key) && PyUnicode_GET_LENGTH(key) > 0) { PyObject *value, *item; - value = PyDict_GetItemWithError(d, key); - if (value != NULL) { + int has_key = PyDict_GetItemRef(d, key, &value); + if (has_key == 1) { item = PyUnicode_FromFormat("%U=%R", key, value); + Py_DECREF(value); if (item == NULL) { loop_error = 1; } @@ -135,7 +136,7 @@ namespace_repr(PyObject *ns) Py_DECREF(item); } } - else if (PyErr_Occurred()) { + else if (has_key < 0) { loop_error = 1; } }