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...@@ -396,20 +396,24 @@ fn lookupDns(io: Io, lookup_canon_name: []const u8, rc: *const ResolvConf, optio
396 std.posix.RR.A => {396 std.posix.RR.A => {
397 const data = record.packet[record.data_off..][0..record.data_len];397 const data = record.packet[record.data_off..][0..record.data_len];
398 if (data.len != 4) return error.InvalidDnsARecord;398 if (data.len != 4) return error.InvalidDnsARecord;
399 options.addresses_buffer[addresses_len] = .{ .ip4 = .{399 if (addresses_len < options.addresses_buffer.len) {
400 .bytes = data[0..4].*,400 options.addresses_buffer[addresses_len] = .{ .ip4 = .{
401 .port = options.port,401 .bytes = data[0..4].*,
402 } };402 .port = options.port,
403 addresses_len += 1;403 } };
404 addresses_len += 1;
405 }
404 },406 },
405 std.posix.RR.AAAA => {407 std.posix.RR.AAAA => {
406 const data = record.packet[record.data_off..][0..record.data_len];408 const data = record.packet[record.data_off..][0..record.data_len];
407 if (data.len != 16) return error.InvalidDnsAAAARecord;409 if (data.len != 16) return error.InvalidDnsAAAARecord;
408 options.addresses_buffer[addresses_len] = .{ .ip6 = .{410 if (addresses_len < options.addresses_buffer.len) {
409 .bytes = data[0..16].*,411 options.addresses_buffer[addresses_len] = .{ .ip6 = .{
410 .port = options.port,412 .bytes = data[0..16].*,
411 } };413 .port = options.port,
412 addresses_len += 1;414 } };
415 addresses_len += 1;
416 }
413 },417 },
414 std.posix.RR.CNAME => {418 std.posix.RR.CNAME => {
415 _, canonical_name = expand(record.packet, record.data_off, options.canonical_name_buffer) catch419 _, 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...@@ -472,6 +476,7 @@ fn lookupHostsReader(host_name: HostName, options: LookupOptions, reader: *Io.Re
472 error.ReadFailed => return error.ReadFailed,476 error.ReadFailed => return error.ReadFailed,
473 error.EndOfStream => break,477 error.EndOfStream => break,
474 };478 };
479 reader.toss(1);
475 var split_it = std.mem.splitScalar(u8, line, '#');480 var split_it = std.mem.splitScalar(u8, line, '#');
476 const no_comment_line = split_it.first();481 const no_comment_line = split_it.first();
477482