https://github.com/python/cpython/commit/f78e1aa1f0ed2226dcaa4631f66f1419dbb2e63b commit: f78e1aa1f0ed2226dcaa4631f66f1419dbb2e63b branch: 3.13 author: Miss Islington (bot) <[email protected]> committer: colesbury <[email protected]> date: 2024-07-13T16:31:50Z summary:
[3.13] gh-121652: Handle `allocate_weakref` returning NULL (GH-121653) (#121721) The `allocate_weakref` may return NULL when out of memory. We need to handle that case and propagate the error. (cherry picked from commit a640a605a8a1a3f73b98f948d0c2a7d42134f692) Co-authored-by: Sam Gross <[email protected]> files: M Objects/weakrefobject.c diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c index 0fcd37d949b34a..61f05514a48023 100644 --- a/Objects/weakrefobject.c +++ b/Objects/weakrefobject.c @@ -426,6 +426,10 @@ get_or_create_weakref(PyTypeObject *type, PyObject *obj, PyObject *callback) return basic_ref; } PyWeakReference *newref = allocate_weakref(type, obj, callback); + if (newref == NULL) { + UNLOCK_WEAKREFS(obj); + return NULL; + } insert_weakref(newref, list); UNLOCK_WEAKREFS(obj); return newref; @@ -433,6 +437,9 @@ get_or_create_weakref(PyTypeObject *type, PyObject *obj, PyObject *callback) else { // We may not be able to safely allocate inside the lock PyWeakReference *newref = allocate_weakref(type, obj, callback); + if (newref == NULL) { + return NULL; + } LOCK_WEAKREFS(obj); insert_weakref(newref, list); UNLOCK_WEAKREFS(obj); _______________________________________________ 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]
