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(...@@ -11997,8 +11997,7 @@ fn netLookupFallible(
11997 var canon_name: ?[*:0]const u16 = null;11997 var canon_name: ?[*:0]const u16 = null;
11998 while (it) |info| : (it = info.next) {11998 while (it) |info| : (it = info.next) {
11999 const addr = info.addr orelse continue;11999 const addr = info.addr orelse continue;
12000 const storage: WsaAddress = .{ .any = addr.* };12000 try resolved.putOne(t_io, .{ .address = addressFromWsa(@alignCast(@fieldParentPtr("any", addr))) });
12001 try resolved.putOne(t_io, .{ .address = addressFromWsa(&storage) });
1200212001
12003 if (info.canonname) |n| {12002 if (info.canonname) |n| {
12004 if (canon_name == null) {12003 if (canon_name == null) {
...@@ -12153,8 +12152,7 @@ fn netLookupFallible(...@@ -12153,8 +12152,7 @@ fn netLookupFallible(
12153 var canon_name: ?[*:0]const u8 = null;12152 var canon_name: ?[*:0]const u8 = null;
12154 while (it) |info| : (it = info.next) {12153 while (it) |info| : (it = info.next) {
12155 const addr = info.addr orelse continue;12154 const addr = info.addr orelse continue;
12156 const storage: PosixAddress = .{ .any = addr.* };12155 try resolved.putOne(t_io, .{ .address = addressFromPosix(@alignCast(@fieldParentPtr("any", addr))) });
12157 try resolved.putOne(t_io, .{ .address = addressFromPosix(&storage) });
1215812156
12159 if (info.canonname) |n| {12157 if (info.canonname) |n| {
12160 if (canon_name == null) {12158 if (canon_name == null) {