Commit 66f8c43b authored by Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

#5924: on Windows, a large PYTHONPATH (more than 255 chars) was completely ignored.

Will backport to 3.0.
parent 5b4a54c5
...@@ -171,6 +171,16 @@ class CmdLineTest(unittest.TestCase): ...@@ -171,6 +171,16 @@ class CmdLineTest(unittest.TestCase):
self.assertEqual(rc, 0) self.assertEqual(rc, 0)
self.assert_(data.startswith(b'x'), data) self.assert_(data.startswith(b'x'), data)
def test_large_PYTHONPATH(self):
with test.support.EnvironmentVarGuard() as env:
path1 = "ABCDE" * 100
path2 = "FGHIJ" * 100
env['PYTHONPATH'] = path1 + os.pathsep + path2
p = _spawn_python('-S', '-c', 'import sys; print(sys.path)')
stdout, _ = p.communicate()
self.assert_(path1.encode('ascii') in stdout)
self.assert_(path2.encode('ascii') in stdout)
def test_main(): def test_main():
test.support.run_unittest(CmdLineTest) test.support.run_unittest(CmdLineTest)
......
...@@ -12,6 +12,9 @@ What's New in Python 3.1 Release Candidate 2? ...@@ -12,6 +12,9 @@ What's New in Python 3.1 Release Candidate 2?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #5924: On Windows, a large PYTHONPATH environment variable
(more than 255 characters) would be completely ignored.
- Issue #4547: When debugging a very large function, it was not always - Issue #4547: When debugging a very large function, it was not always
possible to update the lineno attribute of the current frame. possible to update the lineno attribute of the current frame.
......
...@@ -424,8 +424,6 @@ calculate_path(void) ...@@ -424,8 +424,6 @@ calculate_path(void)
wchar_t *buf; wchar_t *buf;
size_t bufsz; size_t bufsz;
wchar_t *pythonhome = Py_GetPythonHome(); wchar_t *pythonhome = Py_GetPythonHome();
char *_envpath = Py_GETENV("PYTHONPATH");
wchar_t wenvpath[MAXPATHLEN+1];
wchar_t *envpath = NULL; wchar_t *envpath = NULL;
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
...@@ -434,13 +432,20 @@ calculate_path(void) ...@@ -434,13 +432,20 @@ calculate_path(void)
wchar_t *userpath = NULL; wchar_t *userpath = NULL;
wchar_t zip_path[MAXPATHLEN+1]; wchar_t zip_path[MAXPATHLEN+1];
size_t len; size_t len;
#endif
if (!Py_IgnoreEnvironmentFlag) {
envpath = _wgetenv(L"PYTHONPATH");
}
#else
char *_envpath = Py_GETENV("PYTHONPATH");
wchar_t wenvpath[MAXPATHLEN+1];
if (_envpath) { if (_envpath) {
size_t r = mbstowcs(wenvpath, _envpath, MAXPATHLEN+1); size_t r = mbstowcs(wenvpath, _envpath, MAXPATHLEN+1);
envpath = wenvpath; envpath = wenvpath;
if (r == (size_t)-1 || r >= MAXPATHLEN) if (r == (size_t)-1 || r >= MAXPATHLEN)
envpath = NULL; envpath = NULL;
} }
#endif
get_progpath(); get_progpath();
/* progpath guaranteed \0 terminated in MAXPATH+1 bytes. */ /* progpath guaranteed \0 terminated in MAXPATH+1 bytes. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment