zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit d3f0c460ecb0ca5b1ba9c57f443463e1f3f49012 (tree)
parent 923a7bdd7e390c5dbb0fcf2686998180ba41cc88
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Mon, 13 Oct 2025 18:06:44 -0700

std.Io.net.HostName: fix DNS resolution

* merge conflict with changing behavior of takeDelimiterExclusive
* check bounds before adding to result array

Diffstat:
Mlib/std/Io/net/HostName.zig | 25+++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/lib/std/Io/net/HostName.zig b/lib/std/Io/net/HostName.zig @@ -396,20 +396,24 @@ fn lookupDns(io: Io, lookup_canon_name: []const u8, rc: *const ResolvConf, optio std.posix.RR.A => { const data = record.packet[record.data_off..][0..record.data_len]; if (data.len != 4) return error.InvalidDnsARecord; - options.addresses_buffer[addresses_len] = .{ .ip4 = .{ - .bytes = data[0..4].*, - .port = options.port, - } }; - addresses_len += 1; + if (addresses_len < options.addresses_buffer.len) { + options.addresses_buffer[addresses_len] = .{ .ip4 = .{ + .bytes = data[0..4].*, + .port = options.port, + } }; + addresses_len += 1; + } }, std.posix.RR.AAAA => { const data = record.packet[record.data_off..][0..record.data_len]; if (data.len != 16) return error.InvalidDnsAAAARecord; - options.addresses_buffer[addresses_len] = .{ .ip6 = .{ - .bytes = data[0..16].*, - .port = options.port, - } }; - addresses_len += 1; + if (addresses_len < options.addresses_buffer.len) { + options.addresses_buffer[addresses_len] = .{ .ip6 = .{ + .bytes = data[0..16].*, + .port = options.port, + } }; + addresses_len += 1; + } }, std.posix.RR.CNAME => { _, canonical_name = expand(record.packet, record.data_off, options.canonical_name_buffer) catch @@ -472,6 +476,7 @@ fn lookupHostsReader(host_name: HostName, options: LookupOptions, reader: *Io.Re error.ReadFailed => return error.ReadFailed, error.EndOfStream => break, }; + reader.toss(1); var split_it = std.mem.splitScalar(u8, line, '#'); const no_comment_line = split_it.first();