aboutsummaryrefslogtreecommitdiff
path: root/lib/std/net
diff options
context:
space:
mode:
authorKirjastonhoitaja <thekirjastonhoitaja@protonmail.com>2021-09-15 09:51:43 +0200
committerIsaac Freund <ifreund@ifreund.xyz>2021-09-16 11:35:12 +0200
commite1bf350b4d66a682c8fc5f151563dd1725e8eaf1 (patch)
tree3f5862ce05476513a87c24708bf08631d5587d8d /lib/std/net
parentd5c1d24964b0ee8ad37beb8e2a907e8caa645e07 (diff)
downloadzig-e1bf350b4d66a682c8fc5f151563dd1725e8eaf1.tar.gz
zig-e1bf350b4d66a682c8fc5f151563dd1725e8eaf1.zip
net.Address: Fix writing 0-bytes when formatting Unix addresses
The entire 'path' array would get written to the formatting function, when it should instead be treated as a regular zero-terminated string. Note that this doesn't handle abstract paths on Linux, those paths *start* with a \0 byte and are hence treated as empty strings instead. But fixing that would require more adjustments than just formatting, in particular to getOsSockLen().
Diffstat (limited to 'lib/std/net')
-rw-r--r--lib/std/net/test.zig13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/std/net/test.zig b/lib/std/net/test.zig
index 2e63fc9329..16a43fa421 100644
--- a/lib/std/net/test.zig
+++ b/lib/std/net/test.zig
@@ -90,6 +90,19 @@ test "parse and render IPv4 addresses" {
try testing.expectError(error.NonCanonical, net.Address.parseIp4("127.01.0.1", 0));
}
+test "parse and render UNIX addresses" {
+ if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (!net.has_unix_sockets) return error.SkipZigTest;
+
+ var buffer: [14]u8 = undefined;
+ const addr = net.Address.initUnix("/tmp/testpath") catch unreachable;
+ const fmt_addr = std.fmt.bufPrint(buffer[0..], "{}", .{addr}) catch unreachable;
+ try std.testing.expectEqualSlices(u8, "/tmp/testpath", fmt_addr);
+
+ const too_long = [_]u8{'a'} ** (addr.un.path.len + 1);
+ try testing.expectError(error.NameTooLong, net.Address.initUnix(too_long[0..]));
+}
+
test "resolve DNS" {
if (builtin.os.tag == .wasi) return error.SkipZigTest;