https://github.com/python/cpython/commit/a2916fe46018dad261ce26ba73d23d2f9f94f1a0 commit: a2916fe46018dad261ce26ba73d23d2f9f94f1a0 branch: 3.14 author: Miss Islington (bot) <[email protected]> committer: JelleZijlstra <[email protected]> date: 2026-10-23T12:33:28-07:00 summary:
[3.14] gh-159739: Keep descriptor metadata dictionaries alive during insertion (GH-160193) (#160383) The classmethod and staticmethod metadata setters dropped their reference to the descriptor dictionary before inserting the new value. A key comparison or value finalizer can replace the dictionary during insertion, leaving the operation using released memory. Keep the dictionary alive until insertion finishes. Backport to 3.15 and 3.14. (cherry picked from commit a076a55ad2a318cd8b7010d85ccf21ccd0a98555) Co-authored-by: Jelle Zijlstra <[email protected]> files: A Misc/NEWS.d/next/Core_and_Builtins/2026-10-21-21-26-10.gh-issue-159739.CbTE4N.rst M Objects/funcobject.c diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-10-21-21-26-10.gh-issue-159739.CbTE4N.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-10-21-21-26-10.gh-issue-159739.CbTE4N.rst new file mode 100644 index 00000000000000..20072791808dd1 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-10-21-21-26-10.gh-issue-159739.CbTE4N.rst @@ -0,0 +1 @@ +Fix a possible crash when assigning metadata to :class:`classmethod` or :class:`staticmethod` objects. diff --git a/Objects/funcobject.c b/Objects/funcobject.c index 412c7ec4d0a66e..2c645315012ed0 100644 --- a/Objects/funcobject.c +++ b/Objects/funcobject.c @@ -1480,8 +1480,9 @@ descriptor_set_wrapped_attribute(PyObject *oobj, PyObject *name, PyObject *value return 0; } else { + int result = PyDict_SetItem(dict, name, value); Py_DECREF(dict); - return PyDict_SetItem(dict, name, value); + return result; } } _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: [email protected]
