mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-46297: Fix interpreter crash on startup with multiple PythonPaths set in registry (GH-30466)
This commit is contained in:
parent
74d1663580
commit
c9dc1f491e
4 changed files with 13 additions and 14 deletions
|
@ -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:
|
||||
|
|
|
@ -400,6 +400,7 @@ Lars Damerow
|
|||
Evan Dandrea
|
||||
Eric Daniel
|
||||
Scott David Daniels
|
||||
Derzsi Dániel
|
||||
Lawrence D'Anna
|
||||
Ben Darnell
|
||||
Kushal Das
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fixed an interpreter crash on bootup with multiple PythonPaths set in
|
||||
the Windows registry. Patch by Derzsi Dániel.
|
|
@ -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)
|
||||
v = winreg.QueryValue(key, winreg.EnumKey(key, i))
|
||||
except OSError:
|
||||
break
|
||||
if isinstance(v, str):
|
||||
pythonpath.append(v)
|
||||
i += 1
|
||||
except OSError:
|
||||
break
|
||||
finally:
|
||||
winreg.CloseKey(key)
|
||||
except OSError:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue