diff --git a/idna/core.py b/idna/core.py index 871ebd3..c66fb9f 100644 --- a/idna/core.py +++ b/idna/core.py @@ -312,7 +312,10 @@ def ulabel(label): check_label(label_bytes) return label_bytes.decode('ascii') - label = label_bytes.decode('punycode') + try: + label = label_bytes.decode('punycode') + except UnicodeError: + raise IDNAError('Invalid A-label') check_label(label) return label diff --git a/tests/test_idna.py b/tests/test_idna.py index 7ac6057..f0c74d2 100755 --- a/tests/test_idna.py +++ b/tests/test_idna.py @@ -260,6 +260,7 @@ def test_decode(self): self.assertRaises(idna.IDNAError, idna.decode, 'xn---------90gglbagaac.aa') self.assertRaises(idna.IDNAError, idna.decode, 'xn--') self.assertRaises(idna.IDNAError, idna.decode, b'\x8d\xd2') + self.assertRaises(idna.IDNAError, idna.decode, b'A.A.0.a.a.A.0.a.A.A.0.a.A.0A.2.a.A.A.0.a.A.0.A.a.A0.a.a.A.0.a.fB.A.A.a.A.A.B.A.A.a.A.A.B.A.A.a.A.A.0.a.A.a.a.A.A.0.a.A.0.A.a.A0.a.a.A.0.a.fB.A.A.a.A.A.B.0A.A.a.A.A.B.A.A.a.A.A.a.A.A.B.A.A.a.A.0.a.B.A.A.a.A.B.A.a.A.A.5.a.A.0.a.Ba.A.B.A.A.a.A.0.a.Xn--B.A.A.A.a') if __name__ == '__main__': unittest.main()