From dc4b2a712f96aa6a27d65af27ca877b084a584ca Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 16 Oct 2010 23:34:22 +0000 Subject: [PATCH] calculate_path(): use _Py_char2wchar() to decode the PATH environment variable, to support surrogate characters --- Modules/getpath.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Modules/getpath.c b/Modules/getpath.c index 2275c847384..776c4645f59 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -407,7 +407,6 @@ calculate_path(void) wchar_t rtpypath[MAXPATHLEN+1]; wchar_t *home = Py_GetPythonHome(); char *_path = getenv("PATH"); - wchar_t wpath[MAXPATHLEN+1]; wchar_t *path = NULL; wchar_t *prog = Py_GetProgramName(); wchar_t argv0_path[MAXPATHLEN+1]; @@ -429,14 +428,8 @@ calculate_path(void) char execpath[MAXPATHLEN+1]; #endif - if (_path) { - size_t r = mbstowcs(wpath, _path, MAXPATHLEN+1); - path = wpath; - if (r == (size_t)-1 || r > MAXPATHLEN) { - /* Could not convert PATH, or it's too long. */ - path = NULL; - } - } + if (_path) + path = _Py_char2wchar(_path, NULL); /* If there is no slash in the argv0 path, then we have to * assume python is on the user's $PATH, since there's no @@ -491,6 +484,8 @@ calculate_path(void) } else progpath[0] = '\0'; + if (path != NULL) + PyMem_Free(path); if (progpath[0] != SEP && progpath[0] != '\0') absolutize(progpath); wcsncpy(argv0_path, progpath, MAXPATHLEN);