]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Pull up 42a85bfb058e6d59b7674651c6fba3aebd8a3481 from dnspython.
authorBob Halley <halley@dnspython.org>
Sun, 31 Aug 2014 23:26:59 +0000 (16:26 -0700)
committerBob Halley <halley@dnspython.org>
Sun, 31 Aug 2014 23:26:59 +0000 (16:26 -0700)
dns/name.py

index 29489982e7a96f7b2bcc182915c8683fe71a5eff..f556287fd10fc6f9e6ab54f9bfb4b531082ac924 100644 (file)
@@ -82,8 +82,10 @@ class LabelMixesUnicodeAndASCII(dns.exception.SyntaxError):
 
 _escaped = frozenset([ord(c) for c in '"().;\\@$'])
 
-def _escapify(label):
+def _escapify(label, unicode_mode=False):
     """Escape the characters in label which need it.
+    @param unicode_mode: escapify only special and whitespace (<= 0x20)
+    characters
     @returns: the escaped string
     @rtype: string"""
     text = ''
@@ -93,7 +95,10 @@ def _escapify(label):
         elif c > 0x20 and c < 0x7F:
             text += chr(c)
         else:
-            text += '\\%03d' % c
+            if unicode_mode and c >= 0x7F:
+                text += chr(c)
+            else:
+                text += '\\%03d' % c
     return text
 
 def _bytesify(label):
@@ -360,7 +365,7 @@ class Name(object):
             l = self.labels[:-1]
         else:
             l = self.labels
-        s = '.'.join([encodings.idna.ToUnicode(_escapify(x)) for x in l])
+        s = '.'.join([_escapify(encodings.idna.ToUnicode(x), True) for x in l])
         return s
 
     def to_digestable(self, origin=None):