Merge pull request #176 from kjd/issue-174
Restore IDNAError exception for codepoints that don't exist in Unicode (fixes #174)
diff --git a/idna/core.py b/idna/core.py
index 0dae61a..69b66ef 100644
--- a/idna/core.py
+++ b/idna/core.py
@@ -240,8 +240,12 @@
if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']):
continue
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']):
- if not valid_contextj(label, pos):
- raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format(
+ try:
+ if not valid_contextj(label, pos):
+ raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format(
+ _unot(cp_value), pos+1, repr(label)))
+ except ValueError:
+ raise IDNAError('Unknown codepoint adjacent to joiner {} at position {} in {}'.format(
_unot(cp_value), pos+1, repr(label)))
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']):
if not valid_contexto(label, pos):
diff --git a/tests/test_idna.py b/tests/test_idna.py
index 81afb32..0641eeb 100755
--- a/tests/test_idna.py
+++ b/tests/test_idna.py
@@ -270,6 +270,7 @@
self.assertRaises(idna.IDNAError, decode, b'xn--')
self.assertRaises(idna.IDNAError, decode, b'\x8d\xd2')
self.assertRaises(idna.IDNAError, 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')
+ self.assertRaises(idna.IDNAError, decode, b'xn--ukba655qaaaa14431eeaaba.c')
if __name__ == '__main__':
unittest.main()