[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