[Python-checkins] cpython (merge 3.2 -> default): Merge

antoine.pitrou python-checkins at python.org
Thu Mar 17 23:37:23 CET 2011


http://hg.python.org/cpython/rev/b4104ffd5127
changeset: 68664:b4104ffd5127
parent: 68661:90cdc371a3b8
parent: 68663:0b2aab561a15
user: Antoine Pitrou <solipsis at pitrou.net>
date: Thu Mar 17 23:37:06 2011 +0100
summary:
 Merge
files:
 Misc/NEWS
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
 Core and Builtins
 -----------------
 
+- Issue #10914: fix bogus memory management in Modules/getpath.c, leading to
+ a possible crash when calling Py_SetPath().
+
 - _ast.__version__ is now a Mercurial integer and hex revision.
 
 - Issue #11432: A bug was introduced in subprocess.Popen on posix systems with
diff --git a/Modules/getpath.c b/Modules/getpath.c
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -134,6 +134,7 @@
 static wchar_t exec_prefix[MAXPATHLEN+1];
 static wchar_t progpath[MAXPATHLEN+1];
 static wchar_t *module_search_path = NULL;
+static int module_search_path_malloced = 0;
 static wchar_t *lib_python = L"lib/python" VERSION;
 
 static void
@@ -634,7 +635,6 @@
 bufsz += wcslen(zip_path) + 1;
 bufsz += wcslen(exec_prefix) + 1;
 
- /* This is the only malloc call in this file */
 buf = (wchar_t *)PyMem_Malloc(bufsz*sizeof(wchar_t));
 
 if (buf == NULL) {
@@ -687,6 +687,7 @@
 
 /* And publish the results */
 module_search_path = buf;
+ module_search_path_malloced = 1;
 }
 
 /* Reduce prefix and exec_prefix to their essence,
@@ -726,15 +727,18 @@
 Py_SetPath(const wchar_t *path)
 {
 if (module_search_path != NULL) {
- free(module_search_path);
+ if (module_search_path_malloced)
+ PyMem_Free(module_search_path);
 module_search_path = NULL;
+ module_search_path_malloced = 0;
 }
 if (path != NULL) {
 extern wchar_t *Py_GetProgramName(void);
 wchar_t *prog = Py_GetProgramName();
 wcsncpy(progpath, prog, MAXPATHLEN);
 exec_prefix[0] = prefix[0] = L'0円';
- module_search_path = malloc((wcslen(path) + 1) * sizeof(wchar_t));
+ module_search_path = PyMem_Malloc((wcslen(path) + 1) * sizeof(wchar_t));
+ module_search_path_malloced = 1;
 if (module_search_path != NULL)
 wcscpy(module_search_path, path);
 }
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /