]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-119070: Fix py.exe handling of /usr/bin/env commands missing extension (GH-119426)
authorSteve Dower <steve.dower@python.org>
Wed, 29 May 2024 17:51:13 +0000 (18:51 +0100)
committerGitHub <noreply@github.com>
Wed, 29 May 2024 17:51:13 +0000 (18:51 +0100)
Lib/test/test_launcher.py
Misc/NEWS.d/next/Windows/2024-05-22-19-43-29.gh-issue-119070._enton.rst [new file with mode: 0644]
PC/launcher2.c

index 2528a51240fbf7646ca0176b3456567a5b894055..6d358ac6f16a2727ca65025ad4528730bf1c6c69 100644 (file)
@@ -764,3 +764,11 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
             with self.script(f'#! /usr/bin/env {exe.stem} arg1') as script:
                 data = self.run_py([script], env=env)
             self.assertEqual(data["stdout"].strip(), f"{quote(exe)} arg1 {quote(script)}")
+
+    def test_shebang_executable_extension(self):
+        with self.script('#! /usr/bin/env python3.12') as script:
+            data = self.run_py([script])
+        expect = "# Search PATH for python3.12.exe"
+        actual = [line.strip() for line in data["stderr"].splitlines()
+                  if line.startswith("# Search PATH")]
+        self.assertEqual([expect], actual)
diff --git a/Misc/NEWS.d/next/Windows/2024-05-22-19-43-29.gh-issue-119070._enton.rst b/Misc/NEWS.d/next/Windows/2024-05-22-19-43-29.gh-issue-119070._enton.rst
new file mode 100644 (file)
index 0000000..aab26f5
--- /dev/null
@@ -0,0 +1,3 @@
+Fixes ``py.exe`` handling of shebangs like ``/usr/bin/env python3.12``,
+which were previously interpreted as ``python3.exe`` instead of
+``python3.12.exe``.
index 98231613efb26f40a69f94180ebf1a6ba1dd1316..b372044e353202316ca235651094b485193d49e3 100644 (file)
@@ -853,7 +853,7 @@ searchPath(SearchInfo *search, const wchar_t *shebang, int shebangLength)
     }
 
     wchar_t filename[MAXLEN];
-    if (wcsncpy_s(filename, MAXLEN, command, lastDot)) {
+    if (wcsncpy_s(filename, MAXLEN, command, commandLength)) {
         return RC_BAD_VIRTUAL_PATH;
     }