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.
This commit is contained in:
David Rubin 2025-11-06 17:44:28 -08:00
parent 654a5b20d7
commit 71988d6719
No known key found for this signature in database
GPG key ID: 5CF5B5A4747520AA

View file

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