authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-10-13 18:06:44-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-10-29 06:20:49-07:00
logd3f0c460ecb0ca5b1ba9c57f443463e1f3f49012
tree18c69f9c716f4278b685005fff1613b074b525b6
parent923a7bdd7e390c5dbb0fcf2686998180ba41cc88

std.Io.net.HostName: fix DNS resolution

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

1 files changed, 15 insertions(+), 10 deletions(-)

lib/std/Io/net/HostName.zig+15-10
......@@ -396,20 +396,24 @@ fn lookupDns(io: Io, lookup_canon_name: []const u8, rc: *const ResolvConf, optio
396396 std.posix.RR.A => {
397397 const data = record.packet[record.data_off..][0..record.data_len];
398398 if (data.len != 4) return error.InvalidDnsARecord;
399 options.addresses_buffer[addresses_len] = .{ .ip4 = .{
400 .bytes = data[0..4].*,
401 .port = options.port,
402 } };
403 addresses_len += 1;
399 if (addresses_len < options.addresses_buffer.len) {
400 options.addresses_buffer[addresses_len] = .{ .ip4 = .{
401 .bytes = data[0..4].*,
402 .port = options.port,
403 } };
404 addresses_len += 1;
405 }
404406 },
405407 std.posix.RR.AAAA => {
406408 const data = record.packet[record.data_off..][0..record.data_len];
407409 if (data.len != 16) return error.InvalidDnsAAAARecord;
408 options.addresses_buffer[addresses_len] = .{ .ip6 = .{
409 .bytes = data[0..16].*,
410 .port = options.port,
411 } };
412 addresses_len += 1;
410 if (addresses_len < options.addresses_buffer.len) {
411 options.addresses_buffer[addresses_len] = .{ .ip6 = .{
412 .bytes = data[0..16].*,
413 .port = options.port,
414 } };
415 addresses_len += 1;
416 }
413417 },
414418 std.posix.RR.CNAME => {
415419 _, 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
472476 error.ReadFailed => return error.ReadFailed,
473477 error.EndOfStream => break,
474478 };
479 reader.toss(1);
475480 var split_it = std.mem.splitScalar(u8, line, '#');
476481 const no_comment_line = split_it.first();
477482