Skip to content

Commit 3183161

Browse files
committed
Encode domain names using UTF-8 with UTS-46 canonicalization
See multiformats/multiaddr#94
1 parent df7176c commit 3183161

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

multiaddr/codecs/idna.py renamed to multiaddr/codecs/domain.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@
1010

1111

1212
def to_bytes(proto, string):
13-
return idna.encode(string, uts46=True)
13+
return idna.uts46_remap(string).encode("utf-8")
1414

1515

1616
def to_string(proto, buf):
17-
return idna.decode(buf)
17+
string = buf.decode("utf-8")
18+
for label in string.split("."):
19+
idna.check_label(label)
20+
return string

multiaddr/protocols.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,10 @@ def __repr__(self):
127127
Protocol(P_DCCP, 'dccp', 'uint16be'),
128128
Protocol(P_IP6, 'ip6', 'ip6'),
129129
Protocol(P_IP6ZONE, 'ip6zone', 'utf8'),
130-
Protocol(P_DNS, 'dns', 'idna'),
131-
Protocol(P_DNS4, 'dns4', 'idna'),
132-
Protocol(P_DNS6, 'dns6', 'idna'),
133-
Protocol(P_DNSADDR, 'dnsaddr', 'idna'),
130+
Protocol(P_DNS, 'dns', 'domain'),
131+
Protocol(P_DNS4, 'dns4', 'domain'),
132+
Protocol(P_DNS6, 'dns6', 'domain'),
133+
Protocol(P_DNSADDR, 'dnsaddr', 'domain'),
134134
Protocol(P_SCTP, 'sctp', 'uint16be'),
135135
Protocol(P_UDT, 'udt', None),
136136
Protocol(P_UTP, 'utp', None),

tests/test_transforms.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,13 @@
3737

3838
# Additional test data
3939
(_names_to_protocols['dns4'],
40-
b'xn--4gbrim.xn----ymcbaaajlc6dj7bxne2c.xn--wgbh1c',
40+
b'\xd9\x85\xd9\x88\xd9\x82\xd8\xb9.\xd9\x88\xd8\xb2\xd8\xa7\xd8\xb1\xd8\xa9'
41+
b'-\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa'
42+
b'.\xd9\x85\xd8\xb5\xd8\xb1',
4143
# Explicitly mark this as unicode to force the text to be LTR in editors
4244
u'موقع.وزارة-الاتصالات.مصر'),
4345
(_names_to_protocols['dns4'],
44-
b'xn--fuball-cta.example',
46+
b'fu\xc3\x9fball.example',
4547
u'fußball.example'), # This will fail if IDNA-2003/NamePrep is used
4648
]
4749

0 commit comments

Comments
 (0)