Windows: Fix regression that broke querying registry for default programs

Apparently under python 3 StopIteration no longer stops while loops,
instead propagating out of them.
This commit is contained in:
Kovid Goyal 2020-10-12 17:22:10 +05:30
parent be6ce66ed1
commit 543cd436fa
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -269,6 +269,8 @@ class Key(object):
file_time = RegEnumKeyEx(self.hkey, i, name_buf, ctypes.byref(lname_buf)) file_time = RegEnumKeyEx(self.hkey, i, name_buf, ctypes.byref(lname_buf))
except ValueError: except ValueError:
raise RuntimeError('Enumerating keys failed with buffer too small, which should never happen') raise RuntimeError('Enumerating keys failed with buffer too small, which should never happen')
except StopIteration:
break
if get_last_write_times: if get_last_write_times:
yield name_buf.value[:lname_buf.value], filetime_to_datettime(file_time) yield name_buf.value[:lname_buf.value], filetime_to_datettime(file_time)
else: else:
@ -330,11 +332,16 @@ class Key(object):
except ValueError: except ValueError:
data_buf = (BYTE * ldata_buf.value)() data_buf = (BYTE * ldata_buf.value)()
continue continue
except StopIteration:
break
data = convert_registry_data(data_buf, ldata_buf.value, vtype.value) data = convert_registry_data(data_buf, ldata_buf.value, vtype.value)
yield name_buf.value[:lname_buf.value], data yield name_buf.value[:lname_buf.value], data
else: else:
try:
RegEnumValue( RegEnumValue(
key, i, name_buf, ctypes.byref(lname_buf), None, None, None, None) key, i, name_buf, ctypes.byref(lname_buf), None, None, None, None)
except StopIteration:
break
yield name_buf.value[:lname_buf.value] yield name_buf.value[:lname_buf.value]
i += 1 i += 1