From 9768676f6f1cc0c7b2efcf3258ef300c0417dbcb Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 10 Nov 2011 22:49:20 +0100 Subject: Speed up IDNA for the common case --- Lib/encodings/idna.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Lib/encodings/idna.py b/Lib/encodings/idna.py index 583bdf1..ea40585 100644 --- a/Lib/encodings/idna.py +++ b/Lib/encodings/idna.py @@ -153,6 +153,20 @@ class Codec(codecs.Codec): if not input: return b'', 0 + try: + result = input.encode('ascii') + except UnicodeEncodeError: + pass + else: + # ASCII name: fast path + labels = result.split(b'.') + for label in labels[:-1]: + if not (0 < len(label) < 64): + raise UnicodeError("label empty or too long") + if len(labels[-1]) >= 64: + raise UnicodeError("label too long") + return result, len(input) + result = bytearray() labels = dots.split(input) if labels and not labels[-1]: @@ -179,6 +193,14 @@ class Codec(codecs.Codec): if not isinstance(input, bytes): # XXX obviously wrong, see #3232 input = bytes(input) + + if ace_prefix not in input: + # Fast path + try: + return input.decode('ascii'), len(input) + except UnicodeDecodeError: + pass + labels = input.split(b".") if labels and len(labels[-1]) == 0: -- cgit v0.12