Commit 19495a7a authored by Victor Stinner's avatar Victor Stinner

Merged revisions 78868-78869 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r78868 | victor.stinner | 2010-03-12 15:20:59 +0100 (ven., 12 mars 2010) | 25 lines

  Merged revisions 78835-78837 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r78835 | victor.stinner | 2010-03-11 13:34:39 +0100 (jeu., 11 mars 2010) | 7 lines

    Issue #7774: Set sys.executable to an empty string if argv[0] has been
    set to an non existent program name and Python is unable to retrieve the real
    program name.

    Fix also sysconfig: if sys.executable is an empty string, use the current
    working directory.
  ........
    r78836 | victor.stinner | 2010-03-11 14:27:35 +0100 (jeu., 11 mars 2010) | 4 lines

    Fix test_executable introduce in previous commit (r78835): Windows is able to
    retrieve the absolute Python path even if argv[0] has been set to a non
    existent program name.
  ........
    r78837 | victor.stinner | 2010-03-11 14:46:06 +0100 (jeu., 11 mars 2010) | 3 lines

    Another fix to test_executable() of test_sys: set the current working to avoid
    the #7774 bug.
  ........
................
  r78869 | victor.stinner | 2010-03-12 15:27:16 +0100 (ven., 12 mars 2010) | 2 lines

  Oops, I loose the NEWS change in my previous backport (r78868) of r78835.
................
parent 09e4697a
...@@ -438,6 +438,23 @@ class SysModuleTest(unittest.TestCase): ...@@ -438,6 +438,23 @@ class SysModuleTest(unittest.TestCase):
out = p.stdout.read().strip() out = p.stdout.read().strip()
self.assertEqual(out, b'?') self.assertEqual(out, b'?')
def test_executable(self):
# Issue #7774: Ensure that sys.executable is an empty string if argv[0]
# has been set to an non existent program name and Python is unable to
# retrieve the real program name
import subprocess
# For a normal installation, it should work without 'cwd'
# argument. For test runs in the build directory, see #7774.
python_dir = os.path.dirname(os.path.realpath(sys.executable))
p = subprocess.Popen(
["nonexistent", "-c",
'import sys; print(sys.executable.encode("ascii", "backslashreplace"))'],
executable=sys.executable, stdout=subprocess.PIPE, cwd=python_dir)
stdout = p.communicate()[0]
executable = stdout.strip().decode("ASCII")
p.wait()
self.assertIn(executable, ["b''", repr(sys.executable.encode("ascii", "backslashreplace"))])
class SizeofTest(unittest.TestCase): class SizeofTest(unittest.TestCase):
......
...@@ -135,6 +135,10 @@ Core and Builtins ...@@ -135,6 +135,10 @@ Core and Builtins
Library Library
------- -------
- Issue #7774: Set sys.executable to an empty string if argv[0] has been set to
an non existent program name and Python is unable to retrieve the real
program name
- Issue #6509: fix re.sub to work properly when the pattern, the string, and - Issue #6509: fix re.sub to work properly when the pattern, the string, and
the replacement were all bytes. Patch by Antoine Pitrou. the replacement were all bytes. Patch by Antoine Pitrou.
......
...@@ -522,7 +522,7 @@ calculate_path(void) ...@@ -522,7 +522,7 @@ calculate_path(void)
} }
else else
progpath[0] = '\0'; progpath[0] = '\0';
if (progpath[0] != SEP) if (progpath[0] != SEP && progpath[0] != '\0')
absolutize(progpath); absolutize(progpath);
wcsncpy(argv0_path, progpath, MAXPATHLEN); wcsncpy(argv0_path, progpath, MAXPATHLEN);
argv0_path[MAXPATHLEN] = '\0'; argv0_path[MAXPATHLEN] = '\0';
......
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