diff options
| author | r00ster91 <r00ster91@proton.me> | 2023-05-01 19:15:51 +0200 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-05-09 11:58:34 +0300 |
| commit | 297b5d1074008b52a8d08a32c9f3281542105bdd (patch) | |
| tree | fbff3796a3c6bd3a214d2f9bfc68b58a77538ea1 /lib/std/Build/Cache | |
| parent | f40539e5d83365412bf8c6973ce867125ea36faf (diff) | |
| download | zig-297b5d1074008b52a8d08a32c9f3281542105bdd.tar.gz zig-297b5d1074008b52a8d08a32c9f3281542105bdd.zip | |
fix `[x]u65529` and above overflowing
```
$ cat overflow.zig
test {
var a: [1]u65535 = undefined;
_ = a;
}
$ zig-out/bin/zig test overflow.zig
thread 290266 panic: integer overflow
zig/src/type.zig:3604:55: 0xada43d in intAbiAlignment (zig)
std.math.ceilPowerOfTwoPromote(u16, (bits + 7) / 8),
^
zig/src/type.zig:3598:42: 0xadd4ea in intAbiSize (zig)
const alignment = intAbiAlignment(bits, target);
^
zig/src/type.zig:3500:61: 0x92be91 in abiSizeAdvanced (zig)
return AbiSizeAdvanced{ .scalar = intAbiSize(bits, target) };
^
zig/src/type.zig:3385:62: 0x928933 in abiSizeAdvanced (zig)
switch (try payload.elem_type.abiSizeAdvanced(target, strat)) {
^
zig/src/type.zig:3268:32: 0x92c012 in abiSize (zig)
return (abiSizeAdvanced(ty, target, .eager) catch unreachable).scalar;
^
```
This is only noticed in a debug build of zig and silently does the wrong
thing and overflows in release builds.
This happened to `[x]u65529` and above because of the ` + 7` on a `u16`.
Diffstat (limited to 'lib/std/Build/Cache')
0 files changed, 0 insertions, 0 deletions
