authorgravatar for greysonmurray.dev@gmail.commoriazoso <greysonmurray.dev@gmail.com> 2026-01-08 06:01:44+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-08 06:01:44+01:00
log514b103edbfa7c66ef5aeb01b5b79110260ce64f
treee197016bc479e656c76a29a0bf6733d48305e694
parent6a5bb3ede36ab9dd7a5ce95e1339ca4e138886fc

std.Io.Threaded: correctly initialize PosixAddress/WsaAddress from sockaddr (#30722)

Resolves ziglang/zig#30672 - UB caused by `std.Io.Threaded.netLookupFallible` incorrectly initializing `PosixAddress`/`WsaAddress` from `*sockaddr`. Reviewed-on: https://codeberg.org/ziglang/zig/pulls/30722 Co-authored-by: moriazoso <greysonmurray.dev@gmail.com> Co-committed-by: moriazoso <greysonmurray.dev@gmail.com>

1 files changed, 2 insertions(+), 4 deletions(-)

lib/std/Io/Threaded.zig+2-4
......@@ -11997,8 +11997,7 @@ fn netLookupFallible(
1199711997 var canon_name: ?[*:0]const u16 = null;
1199811998 while (it) |info| : (it = info.next) {
1199911999 const addr = info.addr orelse continue;
12000 const storage: WsaAddress = .{ .any = addr.* };
12001 try resolved.putOne(t_io, .{ .address = addressFromWsa(&storage) });
12000 try resolved.putOne(t_io, .{ .address = addressFromWsa(@alignCast(@fieldParentPtr("any", addr))) });
1200212001
1200312002 if (info.canonname) |n| {
1200412003 if (canon_name == null) {
......@@ -12153,8 +12152,7 @@ fn netLookupFallible(
1215312152 var canon_name: ?[*:0]const u8 = null;
1215412153 while (it) |info| : (it = info.next) {
1215512154 const addr = info.addr orelse continue;
12156 const storage: PosixAddress = .{ .any = addr.* };
12157 try resolved.putOne(t_io, .{ .address = addressFromPosix(&storage) });
12155 try resolved.putOne(t_io, .{ .address = addressFromPosix(@alignCast(@fieldParentPtr("any", addr))) });
1215812156
1215912157 if (info.canonname) |n| {
1216012158 if (canon_name == null) {