authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-05-25 20:34:44-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-05-25 20:34:44-07:00
log1d750d7067e6e24af00aadc19379cd913652d80e
tree568890d0ff846734519e712c3ee0405991bec70e
parent5b022623cf7059b76d3bbc91c71a93ab96adbdeb

Maker.Step.Run: fix leak in evalGeneric


1 files changed, 3 insertions(+), 6 deletions(-)

lib/compiler/Maker/Step/Run.zig+3-6
......@@ -1374,6 +1374,7 @@ fn sendRunFuzzTestMessage(
13741374 }
13751375}
13761376
1377/// Uses `arena` to allocate the result.
13771378fn evalGeneric(
13781379 arena: Allocator,
13791380 run_index: Configuration.Step.Index,
......@@ -1382,7 +1383,6 @@ fn evalGeneric(
13821383) !EvalGenericResult {
13831384 const graph = maker.graph;
13841385 const io = graph.io;
1385 const gpa = maker.gpa;
13861386 const conf = &maker.scanned_config.configuration;
13871387 const conf_step = run_index.ptr(conf);
13881388 const conf_run = conf_step.extended.get(conf.extra).run;
......@@ -1436,8 +1436,7 @@ fn evalGeneric(
14361436 if (child.stderr) |stderr| {
14371437 var multi_reader_buffer: Io.File.MultiReader.Buffer(2) = undefined;
14381438 var multi_reader: Io.File.MultiReader = undefined;
1439 multi_reader.init(gpa, io, multi_reader_buffer.toStreams(), &.{ stdout, stderr });
1440 defer multi_reader.deinit();
1439 multi_reader.init(arena, io, multi_reader_buffer.toStreams(), &.{ stdout, stderr });
14411440
14421441 const stdout_reader = multi_reader.reader(0);
14431442 const stderr_reader = multi_reader.reader(1);
......@@ -1457,9 +1456,7 @@ fn evalGeneric(
14571456
14581457 try multi_reader.checkAnyError();
14591458
1460 // TODO: this string can leak since alloc below can return error.
14611459 stdout_bytes = try multi_reader.toOwnedSlice(0);
1462 // TODO: this string can leak since its allocated using gpa and `try child.wait(io)` below can fail.
14631460 stderr_bytes = try multi_reader.toOwnedSlice(1);
14641461 } else {
14651462 var stdout_reader = stdout.readerStreaming(io, &.{});
......@@ -2201,7 +2198,7 @@ fn spawnChildAndCollect(
22012198 try setColorEnvironmentVariables(&conf_run, environ_map, terminal_mode);
22022199
22032200 const started: Io.Clock.Timestamp = .now(io, .awake);
2204 const result = evalGeneric(arena, run_index, maker, spawn_options) catch |err| switch (err) {
2201 const result = evalGeneric(graph.arena, run_index, maker, spawn_options) catch |err| switch (err) {
22052202 error.Canceled => |e| return e,
22062203 else => |e| e,
22072204 };