summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2009-06-09 21:30:01 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2009-06-09 21:30:01 (GMT)
commit66f8c43b095a47b90f9887fac233aa7c8e3a3224 (patch)
tree3015d55aec7fc464516b908a88c2d5c52dca1f17
parent5b4a54c5d5a61375b663b25f2c99ea44219fc793 (diff)
downloadcpython-66f8c43b095a47b90f9887fac233aa7c8e3a3224.zip
cpython-66f8c43b095a47b90f9887fac233aa7c8e3a3224.tar.gz
cpython-66f8c43b095a47b90f9887fac233aa7c8e3a3224.tar.bz2
#5924: on Windows, a large PYTHONPATH (more than 255 chars) was completely ignored.
Will backport to 3.0.
-rw-r--r--Lib/test/test_cmd_line.py10
-rw-r--r--Misc/NEWS3
-rw-r--r--PC/getpathp.c11
3 files changed, 21 insertions, 3 deletions
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index 72edc2e..ef3c109 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -171,6 +171,16 @@ class CmdLineTest(unittest.TestCase):
self.assertEqual(rc, 0)
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():
test.support.run_unittest(CmdLineTest)
diff --git a/Misc/NEWS b/Misc/NEWS
index 1aa84d2..b4e2557 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 3.1 Release Candidate 2?
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
possible to update the lineno attribute of the current frame.
diff --git a/PC/getpathp.c b/PC/getpathp.c
index 36abbf2..212f942 100644
--- a/PC/getpathp.c
+++ b/PC/getpathp.c
@@ -424,8 +424,6 @@ calculate_path(void)
wchar_t *buf;
size_t bufsz;
wchar_t *pythonhome = Py_GetPythonHome();
- char *_envpath = Py_GETENV("PYTHONPATH");
- wchar_t wenvpath[MAXPATHLEN+1];
wchar_t *envpath = NULL;
#ifdef MS_WINDOWS
@@ -434,13 +432,20 @@ calculate_path(void)
wchar_t *userpath = NULL;
wchar_t zip_path[MAXPATHLEN+1];
size_t len;
-#endif
+
+ if (!Py_IgnoreEnvironmentFlag) {
+ envpath = _wgetenv(L"PYTHONPATH");
+ }
+#else
+ char *_envpath = Py_GETENV("PYTHONPATH");
+ wchar_t wenvpath[MAXPATHLEN+1];
if (_envpath) {
size_t r = mbstowcs(wenvpath, _envpath, MAXPATHLEN+1);
envpath = wenvpath;
if (r == (size_t)-1 || r >= MAXPATHLEN)
envpath = NULL;
}
+#endif
get_progpath();
/* progpath guaranteed \0 terminated in MAXPATH+1 bytes. */