[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master] fix gpg_get_key_addresses



Do not use codecs.decode(s, "unicode_escape"). It has two issues:
 * When being passed a bytes literal, the returned value becomes a str
   and the decoding operation is locale specific on Python3.
 * When passing a unicode literal, it implicitly encodes to
   sys.getdefaultencoding() (locale specific) on Python2.
Thus "unicode_escape" is a bad choice in all cases.

For Python2 string_escape works with str, but it hinders a potential
Python3 port of dak. Use it now, because Python3 is totally broken.
---
 daklib/utils.py |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/daklib/utils.py b/daklib/utils.py
index 3068309..3ae8d28 100644
--- a/daklib/utils.py
+++ b/daklib/utils.py
@@ -1381,7 +1381,8 @@ def gpg_get_key_addresses(fingerprint):
             except IndexError:
                 continue
             try:
-                uid = codecs.decode(uid.decode("utf-8"), "unicode_escape")
+                # Do not use unicode_escape, because it is locale-specific
+                uid = codecs.decode(uid, "string_escape").decode("utf-8")
             except UnicodeDecodeError:
                 uid = uid.decode("latin1") # does not fail
             m = re_parse_maintainer.match(uid)
-- 
1.7.10.4


Reply to: