]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 73322 via svnmerge from
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 9 Jun 2009 21:31:38 +0000 (21:31 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 9 Jun 2009 21:31:38 +0000 (21:31 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r73322 | amaury.forgeotdarc | 2009-06-09 23:30:01 +0200 (mar., 09 juin 2009) | 4 lines

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

  Will backport to 3.0.
........

Lib/test/test_cmd_line.py
Misc/NEWS
PC/getpathp.c

index 84588cf5fbf6a6a866ee53662d6e394eb78b87de..bc1ec8b355a0f48263c8b9ed1edce03eba91970f 100644 (file)
@@ -169,6 +169,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)
index 143a8497210d97a065e8852ee51ece989fe69bd0..94e074d86293965b66ef701675f413562f83a296 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 3.0.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.
 
index 36abbf24abcfec215cef1b5032d5030c19586a0c..212f9425e3cddfc34a35f450e3d854c3600ffddc 100644 (file)
@@ -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. */