summaryrefslogtreecommitdiff
path: root/dns/name.py
diff options
context:
space:
mode:
Diffstat (limited to 'dns/name.py')
-rw-r--r--dns/name.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/dns/name.py b/dns/name.py
index 677f324..310b032 100644
--- a/dns/name.py
+++ b/dns/name.py
@@ -26,7 +26,7 @@ try:
import idna # type: ignore
have_idna_2008 = True
except ImportError:
- have_idna_2008 = False
+ have_idna_2008 = False # pragma: no cover
import dns.exception
import dns.wiredata
@@ -105,7 +105,7 @@ class IDNACodec:
return label.lower().startswith(b'xn--')
def encode(self, label):
- raise NotImplementedError
+ raise NotImplementedError # pragma: no cover
def decode(self, label):
# We do not apply any IDNA policy on decode.
@@ -191,7 +191,10 @@ class IDNA2008Codec(IDNACodec):
if label == '':
return b''
if self.allow_pure_ascii and is_all_ascii(label):
- return label.encode('ascii')
+ encoded = label.encode('ascii')
+ if len(encoded) > 63:
+ raise LabelTooLong
+ return encoded
if not have_idna_2008:
raise NoIDNA2008
try:
@@ -199,7 +202,10 @@ class IDNA2008Codec(IDNACodec):
label = idna.uts46_remap(label, False, self.transitional)
return idna.alabel(label)
except idna.IDNAError as e:
- raise IDNAException(idna_exception=e)
+ if e.args[0] == 'Label too long':
+ raise LabelTooLong
+ else:
+ raise IDNAException(idna_exception=e)
def decode(self, label):
if not self.strict_decode: