zig

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

commit 514b103edbfa7c66ef5aeb01b5b79110260ce64f (tree)
parent 6a5bb3ede36ab9dd7a5ce95e1339ca4e138886fc
Author: moriazoso <greysonmurray.dev@gmail.com>
Date:   Thu,  8 Jan 2026 06:01:44 +0100

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>

Diffstat:
Mlib/std/Io/Threaded.zig | 6++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig @@ -11997,8 +11997,7 @@ fn netLookupFallible( var canon_name: ?[*:0]const u16 = null; while (it) |info| : (it = info.next) { const addr = info.addr orelse continue; - const storage: WsaAddress = .{ .any = addr.* }; - try resolved.putOne(t_io, .{ .address = addressFromWsa(&storage) }); + try resolved.putOne(t_io, .{ .address = addressFromWsa(@alignCast(@fieldParentPtr("any", addr))) }); if (info.canonname) |n| { if (canon_name == null) { @@ -12153,8 +12152,7 @@ fn netLookupFallible( var canon_name: ?[*:0]const u8 = null; while (it) |info| : (it = info.next) { const addr = info.addr orelse continue; - const storage: PosixAddress = .{ .any = addr.* }; - try resolved.putOne(t_io, .{ .address = addressFromPosix(&storage) }); + try resolved.putOne(t_io, .{ .address = addressFromPosix(@alignCast(@fieldParentPtr("any", addr))) }); if (info.canonname) |n| { if (canon_name == null) {