From 01a85ec7113098e5b3469686096d8e8b4d52951f Mon Sep 17 00:00:00 2001 From: Ivy Xu Date: Wed, 17 Jun 2026 16:51:37 +0800 Subject: [PATCH 1/3] Fix missing PyErr_NoMemory in `_winapi.c` --- .../2026-06-17-16-46-07.gh-issue-151126.vhTL0T.rst | 2 ++ Modules/_winapi.c | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-06-17-16-46-07.gh-issue-151126.vhTL0T.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-06-17-16-46-07.gh-issue-151126.vhTL0T.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-17-16-46-07.gh-issue-151126.vhTL0T.rst new file mode 100644 index 000000000000000..6f2d230b1dcfc00 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-17-16-46-07.gh-issue-151126.vhTL0T.rst @@ -0,0 +1,2 @@ +Avoid possible crash in ``_winapi.c`` where a device has no memory left. Now +it properly raises a :exc:`MemoryError`. Patch by Ivy Xu. diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 369a7400eb63b90..ed9bcdadba053ff 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -1684,6 +1684,10 @@ _winapi_GetShortPathName_impl(PyObject *module, LPCWSTR path) } PyMem_Free((void *)buffer); } + else { + PyErr_NoMemory(); + return result; + } } else { PyErr_SetFromWindowsErr(0); } @@ -2394,6 +2398,7 @@ _winapi_BatchedWaitForMultipleObjects_impl(PyObject *module, while (i < nhandles) { BatchedWaitData *data = (BatchedWaitData*)PyMem_Malloc(sizeof(BatchedWaitData)); if (!data) { + PyErr_NoMemory(); goto error; } thread_data[thread_count++] = data; From 59215a7e5d55431fd8db8995fdabd64e3e113a70 Mon Sep 17 00:00:00 2001 From: Ivy Xu Date: Thu, 25 Jun 2026 17:16:51 +0800 Subject: [PATCH 2/3] Address review --- Modules/_winapi.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Modules/_winapi.c b/Modules/_winapi.c index ed9bcdadba053ff..8014ec66ba98222 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -1685,8 +1685,7 @@ _winapi_GetShortPathName_impl(PyObject *module, LPCWSTR path) PyMem_Free((void *)buffer); } else { - PyErr_NoMemory(); - return result; + return PyErr_NoMemory(); } } else { PyErr_SetFromWindowsErr(0); From 578283061c55f290e773d4a79f6a163ecd8d82c6 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Thu, 25 Jun 2026 13:21:40 +0300 Subject: [PATCH 3/3] Update Modules/_winapi.c --- Modules/_winapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 8014ec66ba98222..5bbb02fe414bfa7 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -1685,7 +1685,7 @@ _winapi_GetShortPathName_impl(PyObject *module, LPCWSTR path) PyMem_Free((void *)buffer); } else { - return PyErr_NoMemory(); + PyErr_NoMemory(); } } else { PyErr_SetFromWindowsErr(0);