authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2025-11-06 17:44:28-08:00
committergravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2025-11-06 17:44:28-08:00
log71988d6719db20e1be24586bab201af72b021b3c
treeede810338f48667d515f6bcf96714461265c87e1
parent654a5b20d7a8eb2d4267b859aff615e4806733c2
signaturelock-open Commit is signed but in an unrecognized format.

Io.net: set `receive{,Timeout}` message to `init`

If we use `undefined`, then `netReceive` can `@intCast` the control slice len to msghdr controllen, which is sometimes `u32`, even on 64-bit platforms. `init` just avoids this entirely by setting `control` to an empty slice rather than undefined.

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

lib/std/Io/net.zig+2-2
...@@ -1118,7 +1118,7 @@ pub const Socket = struct {...@@ -1118,7 +1118,7 @@ pub const Socket = struct {
1118 /// See also:1118 /// See also:
1119 /// * `receiveTimeout`1119 /// * `receiveTimeout`
1120 pub fn receive(s: *const Socket, io: Io, buffer: []u8) ReceiveError!IncomingMessage {1120 pub fn receive(s: *const Socket, io: Io, buffer: []u8) ReceiveError!IncomingMessage {
1121 var message: IncomingMessage = undefined;1121 var message: IncomingMessage = .init;
1122 const maybe_err, const count = io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, .none);1122 const maybe_err, const count = io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, .none);
1123 if (maybe_err) |err| switch (err) {1123 if (maybe_err) |err| switch (err) {
1124 // No timeout is passed to `netReceieve`, so it must not return timeout related errors.1124 // No timeout is passed to `netReceieve`, so it must not return timeout related errors.
...@@ -1144,7 +1144,7 @@ pub const Socket = struct {...@@ -1144,7 +1144,7 @@ pub const Socket = struct {
1144 buffer: []u8,1144 buffer: []u8,
1145 timeout: Io.Timeout,1145 timeout: Io.Timeout,
1146 ) ReceiveTimeoutError!IncomingMessage {1146 ) ReceiveTimeoutError!IncomingMessage {
1147 var message: IncomingMessage = undefined;1147 var message: IncomingMessage = .init;
1148 const maybe_err, const count = io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, timeout);1148 const maybe_err, const count = io.vtable.netReceive(io.userdata, s.handle, (&message)[0..1], buffer, .{}, timeout);
1149 if (maybe_err) |err| return err;1149 if (maybe_err) |err| return err;
1150 assert(1 == count);1150 assert(1 == count);