raise UnicodeError("label empty or too long")
# Step 5: Check ACE prefix
- if label.startswith(sace_prefix):
+ if label[:4].lower() == sace_prefix:
raise UnicodeError("Label starts with ACE prefix")
# Step 6: Encode with PUNYCODE
except UnicodeError:
raise UnicodeError("Invalid character in IDN label")
# Step 3: Check for ACE prefix
- if not label.startswith(ace_prefix):
+ if not label[:4].lower() == ace_prefix:
return str(label, "ascii")
# Step 4: Remove ACE prefix
# XXX obviously wrong, see #3232
input = bytes(input)
- if ace_prefix not in input:
+ if ace_prefix not in input.lower():
# Fast path
try:
return input.decode('ascii'), len(input)
self.assertEqual(str(b"python.org.", "idna"), "python.org.")
self.assertEqual(str(b"xn--pythn-mua.org", "idna"), "pyth\xf6n.org")
self.assertEqual(str(b"xn--pythn-mua.org.", "idna"), "pyth\xf6n.org.")
+ self.assertEqual(str(b"XN--pythn-mua.org.", "idna"), "pyth\xf6n.org.")
+ self.assertEqual(str(b"xN--pythn-mua.org.", "idna"), "pyth\xf6n.org.")
+ self.assertEqual(str(b"Xn--pythn-mua.org.", "idna"), "pyth\xf6n.org.")
+ self.assertEqual(str(b"bugs.xn--pythn-mua.org.", "idna"),
+ "bugs.pyth\xf6n.org.")
+ self.assertEqual(str(b"bugs.XN--pythn-mua.org.", "idna"),
+ "bugs.pyth\xf6n.org.")
def test_builtin_encode(self):
self.assertEqual("python.org".encode("idna"), b"python.org")
--- /dev/null
+In :mod:`encodings.idna`, any capitalization of the the ACE prefix
+(``xn--``) is now acceptable. Patch by Pepijn de Vos and Zackery Spytz.