[Python-checkins] bpo-45582: Fix getpath_isxfile() and test_embed on Windows (GH-29930)

zooba webhook-mailer at python.org
Mon Dec 6 12:25:34 EST 2021


https://github.com/python/cpython/commit/af1db4eb555e02d2bff3476f99f7a653764203b0
commit: af1db4eb555e02d2bff3476f99f7a653764203b0
branch: main
author: neonene <53406459+neonene at users.noreply.github.com>
committer: zooba <steve.dower at microsoft.com>
date: 2021-12-06T17:25:19Z
summary:

bpo-45582: Fix getpath_isxfile() and test_embed on Windows (GH-29930)

files:
M Lib/test/test_embed.py
M Modules/getpath.c

diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index 3620a7619601d..94161b651ff86 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -575,7 +575,7 @@ def _get_expected_config(self):
         return configs
 
     def get_expected_config(self, expected_preconfig, expected,
-                            env, api, modify_path_cb=None):
+                            env, api, modify_path_cb=None, cwd=None):
         configs = self._get_expected_config()
 
         pre_config = configs['pre_config']
@@ -618,6 +618,14 @@ def get_expected_config(self, expected_preconfig, expected,
             expected['base_executable'] = default_executable
         if expected['program_name'] is self.GET_DEFAULT_CONFIG:
             expected['program_name'] = './_testembed'
+            if MS_WINDOWS:
+                # follow the calculation in getpath.py
+                tmpname = expected['program_name'] + '.exe'
+                if cwd:
+                    tmpname = os.path.join(cwd, tmpname)
+                if os.path.isfile(tmpname):
+                    expected['program_name'] += '.exe'
+                del tmpname
 
         config = configs['config']
         for key, value in expected.items():
@@ -711,7 +719,7 @@ def check_all_configs(self, testname, expected_config=None,
         self.get_expected_config(expected_preconfig,
                                  expected_config,
                                  env,
-                                 api, modify_path_cb)
+                                 api, modify_path_cb, cwd)
 
         out, err = self.run_embedded_interpreter(testname,
                                                  env=env, cwd=cwd)
diff --git a/Modules/getpath.c b/Modules/getpath.c
index 8f90a7008625f..2e46226a08531 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -230,7 +230,7 @@ getpath_isxfile(PyObject *Py_UNUSED(self), PyObject *args)
         DWORD attr = GetFileAttributesW(path);
         r = (attr != INVALID_FILE_ATTRIBUTES) &&
             !(attr & FILE_ATTRIBUTE_DIRECTORY) &&
-            SUCCEEDED(PathCchFindExtension(path, cchPath, &ext)) &&
+            SUCCEEDED(PathCchFindExtension(path, cchPath + 1, &ext)) &&
             (CompareStringOrdinal(ext, -1, L".exe", -1, 1 /* ignore case */) == CSTR_EQUAL)
             ? Py_True : Py_False;
 #else



More information about the Python-checkins mailing list