]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-149931: Fix memory leaks on failed realloc (#150476)
authorAN Long <aisk@users.noreply.github.com>
Tue, 26 May 2026 13:31:22 +0000 (22:31 +0900)
committerGitHub <noreply@github.com>
Tue, 26 May 2026 13:31:22 +0000 (13:31 +0000)
(cherry picked from commit ec23ec6870373b64a760f4d7bcc3ed5495e1c9aa)

Modules/_remote_debugging_module.c
Modules/timemodule.c

index d756ac326ff17312a85a2d434d7b5b46751118ac..0b6b9d7f301a98817b0ff472538463c7d5fb9127 100644 (file)
@@ -2459,12 +2459,14 @@ process_single_stack_chunk(
             return -1;
         }
 
-        this_chunk = PyMem_RawRealloc(this_chunk, actual_size);
-        if (!this_chunk) {
+        char *tmp = PyMem_RawRealloc(this_chunk, actual_size);
+        if (!tmp) {
+            PyMem_RawFree(this_chunk);
             PyErr_NoMemory();
             set_exception_cause(unwinder, PyExc_MemoryError, "Failed to reallocate stack chunk buffer");
             return -1;
         }
+        this_chunk = tmp;
 
         if (_Py_RemoteDebug_PagedReadRemoteMemory(&unwinder->handle, chunk_addr, actual_size, this_chunk) < 0) {
             PyMem_RawFree(this_chunk);
index 1bfbf3f6a0b991ef7d46ce1b268cd2c576183df1..cbe7359524444a6cfffe3a55b50e3e56125f65c1 100644 (file)
@@ -820,12 +820,15 @@ time_strftime1(time_char **outbuf, size_t *bufsize,
             PyErr_NoMemory();
             return NULL;
         }
-        *outbuf = (time_char *)PyMem_Realloc(*outbuf,
-                                             *bufsize*sizeof(time_char));
-        if (*outbuf == NULL) {
+        time_char *tmp = (time_char *)PyMem_Realloc(*outbuf,
+                                                    *bufsize*sizeof(time_char));
+        if (tmp == NULL) {
+            PyMem_Free(*outbuf);
+            *outbuf = NULL;
             PyErr_NoMemory();
             return NULL;
         }
+        *outbuf = tmp;
 #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
         errno = 0;
 #endif