]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-151842: Fix crash upon OOM in `_interpreters.capture_exception` (GH-151843...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 23 Jun 2026 20:57:34 +0000 (22:57 +0200)
committerGitHub <noreply@github.com>
Tue, 23 Jun 2026 20:57:34 +0000 (20:57 +0000)
(cherry picked from commit 5e0747db2f5a063657a117e88b58a20624c848d1)

Co-authored-by: Amrutha <amruthamodela06@gmail.com>
Misc/NEWS.d/next/Library/2026-06-30-13-00-00.gh-issue-151842.OOM31g.rst [new file with mode: 0644]
Modules/_interpretersmodule.c
Python/crossinterp.c

diff --git a/Misc/NEWS.d/next/Library/2026-06-30-13-00-00.gh-issue-151842.OOM31g.rst b/Misc/NEWS.d/next/Library/2026-06-30-13-00-00.gh-issue-151842.OOM31g.rst
new file mode 100644 (file)
index 0000000..8a2ecf3
--- /dev/null
@@ -0,0 +1,2 @@
+Fix a crash in :func:`!_interpreters.capture_exception` when
+:exc:`MemoryError` happens. Patch by Amrutha Modela.
index faf3b25b68c4eb3eec231bc7a601bbba016f34be..70adb59d6fdd54c30cd8a037a0019932c5ceb4fd 100644 (file)
@@ -1580,7 +1580,9 @@ capture_exception(PyObject *self, PyObject *args, PyObject *kwds)
     }
 
 finally:
-    _PyXI_FreeExcInfo(info);
+    if (info != NULL) {
+        _PyXI_FreeExcInfo(info);
+    }
     if (exc != exc_arg) {
         if (PyErr_Occurred()) {
             PyErr_SetRaisedException(exc);
index ba31f356d511f0eaca7c4f859140cacd5a55537d..143b77996481467a314ddd584c0e8ad18c413297 100644 (file)
@@ -1648,6 +1648,7 @@ _PyXI_NewExcInfo(PyObject *exc)
     }
     _PyXI_excinfo *info = PyMem_RawCalloc(1, sizeof(_PyXI_excinfo));
     if (info == NULL) {
+        PyErr_NoMemory();
         return NULL;
     }
     const char *failure;
@@ -1668,6 +1669,7 @@ _PyXI_NewExcInfo(PyObject *exc)
 void
 _PyXI_FreeExcInfo(_PyXI_excinfo *info)
 {
+    assert(info != NULL);
     _PyXI_excinfo_clear(info);
     PyMem_RawFree(info);
 }