]> granicus.if.org Git - python/commitdiff
bpo-31532: Fix memory corruption due to allocator mix (#3679)
authornurelin <nurelin@nurelin.eu>
Thu, 21 Sep 2017 06:08:20 +0000 (08:08 +0200)
committerBenjamin Peterson <benjamin@python.org>
Thu, 21 Sep 2017 06:08:20 +0000 (23:08 -0700)
Fix a memory corruption in getpath.c due to mixed memory allocators
between Py_GetPath() and Py_SetPath().

The fix use the Raw allocator to mimic the windows version.

This patch should be used from python3.6 to the current version

for more details, see the bug report and
  https://github.com/pyinstaller/pyinstaller/issues/2812

Misc/NEWS.d/next/C API/2017-09-20-21-59-52.bpo-31532.s9Cw9_.rst [new file with mode: 0644]
Modules/getpath.c

diff --git a/Misc/NEWS.d/next/C API/2017-09-20-21-59-52.bpo-31532.s9Cw9_.rst b/Misc/NEWS.d/next/C API/2017-09-20-21-59-52.bpo-31532.s9Cw9_.rst
new file mode 100644 (file)
index 0000000..7451986
--- /dev/null
@@ -0,0 +1,2 @@
+Fix memory corruption due to allocator mix in getpath.c between Py_GetPath()
+and Py_SetPath()
index 0f916436c515d6f53c24a0308887a08dadc70181..dd3387a9d77f98c79de5f750d92a3be2fe6bff39 100644 (file)
@@ -735,7 +735,7 @@ calculate_path(void)
     bufsz += wcslen(zip_path) + 1;
     bufsz += wcslen(exec_prefix) + 1;
 
-    buf = PyMem_New(wchar_t, bufsz);
+    buf = PyMem_RawMalloc(bufsz * sizeof(wchar_t));
     if (buf == NULL) {
         Py_FatalError(
             "Not enough memory for dynamic PYTHONPATH");