Skip to content

Commit 73dead9

Browse files
committed
Allow non-ASCII characters in Unix paths
1 parent 5bb65d7 commit 73dead9

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

multiaddr/codec.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import base58
22
import base64
33
import binascii
4+
import os
45

56
import idna
67
from netaddr import IPAddress
@@ -160,7 +161,7 @@ def address_string_to_bytes(proto, addr_string):
160161
raise ValueError("invalid P2P multihash: %s" % mm)
161162
return b''.join([size, mm])
162163
elif proto.code == P_UNIX:
163-
addr_string_bytes = addr_string.encode("ascii")
164+
addr_string_bytes = os.fsencode(addr_string)
164165
size = code_to_varint(len(addr_string_bytes))
165166
return b''.join([size, binascii.hexlify(addr_string_bytes)])
166167
elif proto.code in (P_DNS, P_DNS4, P_DNS6):
@@ -200,7 +201,7 @@ def address_bytes_to_string(proto, buf):
200201
elif proto.code == P_UNIX:
201202
buf = binascii.unhexlify(buf)
202203
size, num_bytes_read = read_varint_code(buf)
203-
return buf[num_bytes_read:].decode('ascii')
204+
return os.fsdecode(buf[num_bytes_read:])
204205
elif proto.code in (P_DNS, P_DNS4, P_DNS6):
205206
buf = binascii.unhexlify(buf)
206207
size, num_bytes_read = read_varint_code(buf)

tests/test_multiaddr.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ def test_invalid(addr_str):
8080
"/ip4/127.0.0.1/udp/1234",
8181
"/ip4/127.0.0.1/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC/tcp/1234",
8282
"/unix/a/b/c/d/e",
83+
"/unix/Überrschung!/大柱",
8384
"/unix/stdio",
8485
"/ip4/1.2.3.4/tcp/80/unix/a/b/c/d/e/f",
8586
"/ip4/127.0.0.1/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC/tcp/1234/unix/stdio",

0 commit comments

Comments
 (0)