windows: prevent bytes from being passed to registry APIs
There was a TortoiseHg bug report in this area[1], and from inspection, it looks
like passing `b""` as `valname` would fail to convert to unicode. The
underlying API allows both `""` and `NULL` to return the default value for the
key.
[1] https://foss.heptapod.net/mercurial/tortoisehg/thg/-/issues/5803
--- a/mercurial/windows.py Thu Jun 02 16:56:39 2022 +0200
+++ b/mercurial/windows.py Mon Jun 13 11:06:33 2022 -0400
@@ -680,7 +680,9 @@
# pytype: disable=module-attr
with winreg.OpenKey(s, encoding.strfromlocal(key)) as hkey:
# pytype: enable=module-attr
- name = valname and encoding.strfromlocal(valname) or valname
+ name = None
+ if valname is not None:
+ name = encoding.strfromlocal(valname)
# pytype: disable=module-attr
val = winreg.QueryValueEx(hkey, name)[0]
# pytype: enable=module-attr