diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-12-24 21:50:37 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-01-01 17:51:21 -0700 |
| commit | 4f8a44cd0f636f3ffe008b2cedafa1e51a4a3796 (patch) | |
| tree | e395558fb0348b842e20de3a059da10673bf3bbd /src | |
| parent | 44e2dbe117fe79b99a970990878a061bdd26ff55 (diff) | |
| download | zig-4f8a44cd0f636f3ffe008b2cedafa1e51a4a3796.tar.gz zig-4f8a44cd0f636f3ffe008b2cedafa1e51a4a3796.zip | |
compiler: fix UAF when writing builtin.zig
Diffstat (limited to 'src')
| -rw-r--r-- | src/Builtin.zig | 3 | ||||
| -rw-r--r-- | src/Package.zig | 4 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/Builtin.zig b/src/Builtin.zig index 8a3a1ecf4b..dc9ccc22c4 100644 --- a/src/Builtin.zig +++ b/src/Builtin.zig @@ -279,7 +279,8 @@ pub fn populateFile(comp: *Compilation, mod: *Module, file: *File) !void { } fn writeFile(file: *File, mod: *Module) !void { - var af = try mod.root.atomicFile(mod.root_src_path, .{ .make_path = true }); + var buf: [std.fs.MAX_PATH_BYTES]u8 = undefined; + var af = try mod.root.atomicFile(mod.root_src_path, .{ .make_path = true }, &buf); defer af.deinit(); try af.file.writeAll(file.source); try af.finish(); diff --git a/src/Package.zig b/src/Package.zig index 373b46e495..da2e214154 100644 --- a/src/Package.zig +++ b/src/Package.zig @@ -88,10 +88,10 @@ pub const Path = struct { p: Path, sub_path: []const u8, options: fs.Dir.AtomicFileOptions, + buf: *[fs.MAX_PATH_BYTES]u8, ) !fs.AtomicFile { - var buf: [fs.MAX_PATH_BYTES]u8 = undefined; const joined_path = if (p.sub_path.len == 0) sub_path else p: { - break :p std.fmt.bufPrint(&buf, "{s}" ++ fs.path.sep_str ++ "{s}", .{ + break :p std.fmt.bufPrint(buf, "{s}" ++ fs.path.sep_str ++ "{s}", .{ p.sub_path, sub_path, }) catch return error.NameTooLong; }; |
