summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_launcher.py8
-rw-r--r--Misc/NEWS.d/next/Windows/2024-05-22-19-43-29.gh-issue-119070._enton.rst3
-rw-r--r--PC/launcher2.c2
3 files changed, 12 insertions, 1 deletions
diff --git a/Lib/test/test_launcher.py b/Lib/test/test_launcher.py
index 2528a51..6d358ac 100644
--- a/Lib/test/test_launcher.py
+++ b/Lib/test/test_launcher.py
@@ -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
index 0000000..aab26f5
--- /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 9823161..b372044 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;
}