-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Closed
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behavior
Milestone
Description
export fn fail_memset() void {
comptime {
var num: u32 = undefined;
@memset(@ptrCast([*]u8, &num), 0, @sizeOf(u32));
}
}
export fn fail_memcpy() void {
comptime {
var src: u32 = 99;
var dst: u32 = undefined;
@memcpy(@ptrCast([*]u8, &dst), @ptrCast([*]const u8, &src), @sizeOf(u32));
}
}./bug1.zig:4:43: error: out of bounds pointer access
@memset(@ptrCast([*]u8, &num), 0, @sizeOf(u32));
^
./bug1.zig:4:9: note: referenced here
@memset(@ptrCast([*]u8, &num), 0, @sizeOf(u32));
^
./bug1.zig:12:9: error: out of bounds pointer access
@memcpy(@ptrCast([*]u8, &dst), @ptrCast([*]const u8, &src), @sizeOf(u32));
^
This was found by trying:
const Foo = extern struct {
num: u32,
};
var x: [*:comptime std.mem.zeroes(Foo)]Foo = undefined;
// or
_ = comptime std.mem.zeroes(Foo);std.mem exposure with zeroes and secureZero (and probably more) can be worked around by replacing the builtins { @memset, @memcpy } with { std.mem.set, std.mem.copy } respectively but is not a solve for the primary issue.
Metadata
Metadata
Assignees
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behavior