Fix usage of PyMem_Malloc() in os.stat()
authorVictor Stinner <victor.stinner@gmail.com>
Wed, 16 Mar 2016 13:30:16 +0000 (14:30 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Wed, 16 Mar 2016 13:30:16 +0000 (14:30 +0100)
Issue #26563: Replace PyMem_Malloc() with PyMem_RawMalloc() in the Windows
implementation of os.stat(), since the code is called without holding the GIL.

Modules/posixmodule.c

index 7e8987845bb624206605f54c10defe0b272a4d48..65b20be4686e666794ec486e1d34bd758e43850f 100644 (file)
@@ -1463,7 +1463,7 @@ get_target_path(HANDLE hdl, wchar_t **target_path)
     if(!buf_size)
         return FALSE;
 
-    buf = PyMem_New(wchar_t, buf_size+1);
+    buf = (wchar_t *)PyMem_RawMalloc((buf_size + 1) * sizeof(wchar_t));
     if (!buf) {
         SetLastError(ERROR_OUTOFMEMORY);
         return FALSE;
@@ -1473,12 +1473,12 @@ get_target_path(HANDLE hdl, wchar_t **target_path)
                        buf, buf_size, VOLUME_NAME_DOS);
 
     if(!result_length) {
-        PyMem_Free(buf);
+        PyMem_RawFree(buf);
         return FALSE;
     }
 
     if(!CloseHandle(hdl)) {
-        PyMem_Free(buf);
+        PyMem_RawFree(buf);
         return FALSE;
     }
 
@@ -1563,7 +1563,7 @@ win32_xstat_impl(const char *path, struct _Py_stat_struct *result,
                     return -1;
 
                 code = win32_xstat_impl_w(target_path, result, FALSE);
-                PyMem_Free(target_path);
+                PyMem_RawFree(target_path);
                 return code;
             }
         } else
@@ -1653,7 +1653,7 @@ win32_xstat_impl_w(const wchar_t *path, struct _Py_stat_struct *result,
                     return -1;
 
                 code = win32_xstat_impl_w(target_path, result, FALSE);
-                PyMem_Free(target_path);
+                PyMem_RawFree(target_path);
                 return code;
             }
         } else