diff --git a/lib/std/Io/net.zig b/lib/std/Io/net.zig index c704d8b9e924da4578e447f9d3e5be3ad9f42533..c32d7dfa5016d16ca6c79ba890c9372fec056c27 100644 --- a/lib/std/Io/net.zig +++ b/lib/std/Io/net.zig @@ -576,7 +576,7 @@ pub const Ip6Address = struct { const name = text[text_i..]; if (name.len == 0) return .incomplete; interface_name_text = name; - text_i = @intCast(text.len); + text_i = std.math.cast(u8, text.len) orelse return .{ .overflow = text.len }; continue :state .end; }, else => return .{ .invalid_byte = text_i }, diff --git a/lib/std/Io/net/test.zig b/lib/std/Io/net/test.zig index 1565904c574a6e392593dc7ad4b3c85a9ac1fd0a..308dc1a32670e207e72511d0128b634972050e6a 100644 --- a/lib/std/Io/net/test.zig +++ b/lib/std/Io/net/test.zig @@ -92,6 +92,11 @@ test "invalid but parseable IPv6 scope ids" { try testing.expectError(error.InterfaceNotFound, net.IpAddress.resolveIp6(io, "ff01::fb%123s45678901234", 0)); } +test "oversized IPv6 scope id" { + const long_scope: [256]u8 = @splat('a'); + try testing.expectError(error.ParseFailed, net.IpAddress.resolveIp6(testing.io, "ff01::fb%" ++ &long_scope, 0)); +} + test "parse and render IPv4 addresses" { try testIp4ParseAndRender("0.0.0.0"); try testIp4ParseAndRender("255.255.255.255");