|
@@ -150,9 +150,11 @@ def valid_contextj(label: str, pos: int) -> bool:
|
|
|
joining_type = idnadata.joining_types.get(ord(label[i]))
|
|
|
if joining_type == ord('T'):
|
|
|
continue
|
|
|
- if joining_type in [ord('L'), ord('D')]:
|
|
|
+ elif joining_type in [ord('L'), ord('D')]:
|
|
|
ok = True
|
|
|
break
|
|
|
+ else:
|
|
|
+ break
|
|
|
|
|
|
if not ok:
|
|
|
return False
|
|
@@ -162,9 +164,11 @@ def valid_contextj(label: str, pos: int) -> bool:
|
|
|
joining_type = idnadata.joining_types.get(ord(label[i]))
|
|
|
if joining_type == ord('T'):
|
|
|
continue
|
|
|
- if joining_type in [ord('R'), ord('D')]:
|
|
|
+ elif joining_type in [ord('R'), ord('D')]:
|
|
|
ok = True
|
|
|
break
|
|
|
+ else:
|
|
|
+ break
|
|
|
return ok
|
|
|
|
|
|
if cp_value == 0x200d:
|
|
@@ -236,12 +240,8 @@ def check_label(label: Union[str, bytes, bytearray]) -> None:
|
|
|
if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']):
|
|
|
continue
|
|
|
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']):
|
|
|
- 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(
|
|
|
+ if not valid_contextj(label, pos):
|
|
|
+ raise InvalidCodepointContext('Joiner {} not allowed 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):
|
|
@@ -262,13 +262,8 @@ def alabel(label: str) -> bytes:
|
|
|
except UnicodeEncodeError:
|
|
|
pass
|
|
|
|
|
|
- if not label:
|
|
|
- raise IDNAError('No Input')
|
|
|
-
|
|
|
- label = str(label)
|
|
|
check_label(label)
|
|
|
- label_bytes = _punycode(label)
|
|
|
- label_bytes = _alabel_prefix + label_bytes
|
|
|
+ label_bytes = _alabel_prefix + _punycode(label)
|
|
|
|
|
|
if not valid_label_length(label_bytes):
|
|
|
raise IDNAError('Label too long')
|