commit 40891348923e48cbf371db5227acea7bb8b263aa (tree)
parent f2c838d2cf652b7124ef60af1e7fdc5601b51fe1
Author: Mason Remaley <mason@anthropicstudios.com>
Date: Wed, 26 Feb 2025 14:53:14 -0800
Zcu: fix ZOIR cache bugs
* When saving bigint limbs, we gave the iovec the wrong length, meaning
bigint data (and the following string and compile error data) was corrupted.
* When updating a stale ZOIR cache, we failed to truncate the file, so
just wrote more bytes onto the end of the stale cache.
Diffstat:
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/Zcu.zig b/src/Zcu.zig
@@ -2751,7 +2751,7 @@ pub fn saveZoirCache(cache_file: std.fs.File, stat: std.fs.File.Stat, zoir: Zoir
},
.{
.base = @ptrCast(zoir.limbs),
- .len = zoir.limbs.len * 4,
+ .len = zoir.limbs.len * @sizeOf(std.math.big.Limb),
},
.{
.base = zoir.string_bytes.ptr,
diff --git a/src/Zcu/PerThread.zig b/src/Zcu/PerThread.zig
@@ -234,6 +234,7 @@ pub fn updateFile(
error.FileTooBig => unreachable, // 0 is not too big
else => |e| return e,
};
+ try cache_file.seekTo(0);
if (stat.size > std.math.maxInt(u32))
return error.FileTooBig;