changeset 6880:892806b3fc0f

util: disinfect lookup_reg strings (issue1126) lookup_reg could return Unicode strings, which would infect other strings and generate unexpected tracebacks. Spotted by Rémy Roy. Fold in silly nested function while we're at it.
author Matt Mackall <mpm@selenic.com>
date Sun, 10 Aug 2008 22:55:00 -0500
parents 24fd94ed1cc0
children d2375bbee6d4
files mercurial/util_win32.py
diffstat 1 files changed, 6 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/util_win32.py	Thu Jul 31 22:41:19 2008 +0300
+++ b/mercurial/util_win32.py	Sun Aug 10 22:55:00 2008 -0500
@@ -201,21 +201,17 @@
     except ImportError:
         return None
 
-    def query_val(scope, key, valname):
-        try:
-            keyhandle = OpenKey(scope, key)
-            return QueryValueEx(keyhandle, valname)[0]
-        except EnvironmentError:
-            return None
-
     if scope is None:
         scope = (HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE)
     elif not isinstance(scope, (list, tuple)):
         scope = (scope,)
     for s in scope:
-        val = query_val(s, key, valname)
-        if val is not None:
-            return val
+        try:
+            val = QueryValueEx(OpenKey(scope, key), valname)[0]
+            # never let a Unicode string escape into the wild
+            return util.tolocal(val.encode('UTF-8'))
+        except EnvironmentError:
+            pass
 
 def system_rcpath_win32():
     '''return default os-specific hgrc search path'''