https://github.com/python/cpython/commit/c3cfc04a736111cb61883cef08469ea46f86d9ce
commit: c3cfc04a736111cb61883cef08469ea46f86d9ce
branch: 3.13
author: Miss Islington (bot) <[email protected]>
committer: zooba <[email protected]>
date: 2024-05-29T20:06:38Z
summary:

gh-119070: Fix py.exe handling of /usr/bin/env commands missing extension 
(GH-119426)

(cherry picked from commit df93f5d4bf9d70036d485666d4dd4f009d37f8b9)

Co-authored-by: Steve Dower <[email protected]>

files:
A Misc/NEWS.d/next/Windows/2024-05-22-19-43-29.gh-issue-119070._enton.rst
M Lib/test/test_launcher.py
M PC/launcher2.c

diff --git a/Lib/test/test_launcher.py b/Lib/test/test_launcher.py
index 2528a51240fbf7..6d358ac6f16a27 100644
--- a/Lib/test/test_launcher.py
+++ b/Lib/test/test_launcher.py
@@ -764,3 +764,11 @@ def test_shebang_command_in_venv(self):
             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
index 00000000000000..aab26f57209864
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2024-05-22-19-43-29.gh-issue-119070._enton.rst
@@ -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``.
diff --git a/PC/launcher2.c b/PC/launcher2.c
index 98231613efb26f..b372044e353202 100644
--- a/PC/launcher2.c
+++ b/PC/launcher2.c
@@ -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;
     }
 

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to