gh-135878: Fix crash in types.SimpleNamespace.__repr__ (#135889)

Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
This commit is contained in:
sobolevn 2025-06-24 19:33:25 +03:00 committed by GitHub
parent e5f03b94b6
commit b3ab94acd3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 7 additions and 3 deletions

View file

@ -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.

View file

@ -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;
}
}