aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorLuis Cáceres <lacc97@protonmail.ch>2023-08-30 22:39:15 +0000
committerVeikka Tuominen <git@vexu.eu>2023-09-06 11:14:24 +0300
commit8976ad7ecbd6a0c70749e3bef9c508d0bfde02d2 (patch)
tree785a2a299ab568bbd563f7991ca333d9e229cc73 /lib/std
parente980bd0aeedff7841882373b42a036c1c985e28f (diff)
downloadzig-8976ad7ecbd6a0c70749e3bef9c508d0bfde02d2.tar.gz
zig-8976ad7ecbd6a0c70749e3bef9c508d0bfde02d2.zip
std.net: Fix IPv6 address parsing for single digit
This fixes the case where IPv6 address parsing incorrectly succeeded on input such as `1`, which now returns error.Incomplete.
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/net.zig3
-rw-r--r--lib/std/net/test.zig3
2 files changed, 6 insertions, 0 deletions
diff --git a/lib/std/net.zig b/lib/std/net.zig
index b03c7e09dc..b6f0f20f2c 100644
--- a/lib/std/net.zig
+++ b/lib/std/net.zig
@@ -406,6 +406,9 @@ pub const Ip6Address = extern struct {
if (!saw_any_digits and !abbrv) {
return error.Incomplete;
}
+ if (!abbrv and index < 14) {
+ return error.Incomplete;
+ }
if (index == 14) {
ip_slice[14] = @as(u8, @truncate(x >> 8));
diff --git a/lib/std/net/test.zig b/lib/std/net/test.zig
index 817d6c2593..fd92c64f35 100644
--- a/lib/std/net/test.zig
+++ b/lib/std/net/test.zig
@@ -13,6 +13,7 @@ test "parse and render IPv6 addresses" {
"FF01::Fb",
"::1",
"::",
+ "1::",
"2001:db8::",
"::1234:5678",
"2001:db8::1234:5678",
@@ -24,6 +25,7 @@ test "parse and render IPv6 addresses" {
"ff01::fb",
"::1",
"::",
+ "1::",
"2001:db8::",
"::1234:5678",
"2001:db8::1234:5678",
@@ -48,6 +50,7 @@ test "parse and render IPv6 addresses" {
try testing.expectError(error.InvalidEnd, net.Address.parseIp6("FF01:0:0:0:0:0:0:FB:", 0));
try testing.expectError(error.Incomplete, net.Address.parseIp6("FF01:", 0));
try testing.expectError(error.InvalidIpv4Mapping, net.Address.parseIp6("::123.123.123.123", 0));
+ try testing.expectError(error.Incomplete, net.Address.parseIp6("1", 0));
// TODO Make this test pass on other operating systems.
if (builtin.os.tag == .linux or comptime builtin.os.tag.isDarwin()) {
try testing.expectError(error.Incomplete, net.Address.resolveIp6("ff01::fb%", 0));