summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_getpath.py7
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-01-07-22-13-59.bpo-46297.83ThTl.rst2
-rw-r--r--Modules/getpath.py17
4 files changed, 13 insertions, 14 deletions
diff --git a/Lib/test/test_getpath.py b/Lib/test/test_getpath.py
index 232b680..1a336a4 100644
--- a/Lib/test/test_getpath.py
+++ b/Lib/test/test_getpath.py
@@ -734,12 +734,15 @@ class MockWinreg:
return n.removeprefix(prefix)
raise OSError("end of enumeration")
- def QueryValue(self, hkey):
+ def QueryValue(self, hkey, subkey):
if verbose:
- print(f"QueryValue({hkey})")
+ print(f"QueryValue({hkey}, {subkey})")
hkey = hkey.casefold()
if hkey not in self.open:
raise RuntimeError("key is not open")
+ if subkey:
+ subkey = subkey.casefold()
+ hkey = f'{hkey}\\{subkey}'
try:
return self.keys[hkey]
except KeyError:
diff --git a/Misc/ACKS b/Misc/ACKS
index 8baaf73..7f2e94d 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -400,6 +400,7 @@ Lars Damerow
Evan Dandrea
Eric Daniel
Scott David Daniels
+Derzsi Dániel
Lawrence D'Anna
Ben Darnell
Kushal Das
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-01-07-22-13-59.bpo-46297.83ThTl.rst b/Misc/NEWS.d/next/Core and Builtins/2022-01-07-22-13-59.bpo-46297.83ThTl.rst
new file mode 100644
index 0000000..558d239
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-01-07-22-13-59.bpo-46297.83ThTl.rst
@@ -0,0 +1,2 @@
+Fixed an interpreter crash on bootup with multiple PythonPaths set in
+the Windows registry. Patch by Derzsi Dániel.
diff --git a/Modules/getpath.py b/Modules/getpath.py
index 37d2ea0..6f2e038 100644
--- a/Modules/getpath.py
+++ b/Modules/getpath.py
@@ -127,7 +127,7 @@
# checked by looking for the BUILDDIR_TXT file, which contains the
# relative path to the platlib dir. The executable_dir value is
# derived from joining the VPATH preprocessor variable to the
-# directory containing pybuilddir.txt. If it is not found, the
+# directory containing pybuilddir.txt. If it is not found, the
# BUILD_LANDMARK file is found, which is part of the source tree.
# prefix is then found by searching up for a file that should only
# exist in the source tree, and the stdlib dir is set to prefix/Lib.
@@ -642,19 +642,12 @@ elif not pythonpath:
i = 0
while True:
try:
- keyname = winreg.EnumKey(key, i)
- subkey = winreg.OpenKeyEx(key, keyname)
- if not subkey:
- continue
- try:
- v = winreg.QueryValue(subkey)
- finally:
- winreg.CloseKey(subkey)
- if isinstance(v, str):
- pythonpath.append(v)
- i += 1
+ v = winreg.QueryValue(key, winreg.EnumKey(key, i))
except OSError:
break
+ if isinstance(v, str):
+ pythonpath.append(v)
+ i += 1
finally:
winreg.CloseKey(key)
except OSError: