authorgravatar for goon.pri.low@gmail.comKendall Condon <goon.pri.low@gmail.com> 2026-04-22 20:53:33-04:00
committergravatar for goon.pri.low@gmail.comKendall Condon <goon.pri.low@gmail.com> 2026-04-22 20:54:17-04:00
log332d632ccceb65d2b28cceee740d794d6d7c4c2a
tree391dbcf68883e56d6020c5f7fc631ac49246fa91
parent122e0c26f23e765d91f0ff15533aeac2f4bc8f65

collect all stderr on fuzzing crash


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

lib/std/Build/Step/Run.zig+7-3
...@@ -2166,11 +2166,15 @@ const FuzzTestRunner = struct {...@@ -2166,11 +2166,15 @@ const FuzzTestRunner = struct {
2166 const result = completion.result;2166 const result = completion.result;
2167 switch (completion.index % 3) {2167 switch (completion.index % 3) {
2168 0 => try f.completeStdinWrite(id, result.file_write_streaming catch |e| switch (e) {2168 0 => try f.completeStdinWrite(id, result.file_write_streaming catch |e| switch (e) {
2169 error.BrokenPipe => return f.instanceEos(id),2169 // Avoid calling `instanceEos` until EndOfStream is seen with stderr so
2170 // that all stderr is collected.
2171 error.BrokenPipe => continue,
2170 else => |write_e| return write_e,2172 else => |write_e| return write_e,
2171 }),2173 }),
2172 1 => try f.completeStdoutRead(id, result.file_read_streaming catch |e| switch (e) {2174 1 => try f.completeStdoutRead(id, result.file_read_streaming catch |e| switch (e) {
2173 error.EndOfStream => return f.instanceEos(id),2175 // Avoid calling `instanceEos` until EndOfStream is seen with stderr so
2176 // that all stderr is collected.
2177 error.EndOfStream => continue,
2174 else => |read_e| return read_e,2178 else => |read_e| return read_e,
2175 }),2179 }),
2176 2 => try f.completeStderrRead(id, result.file_read_streaming catch |e| switch (e) {2180 2 => try f.completeStderrRead(id, result.file_read_streaming catch |e| switch (e) {
...@@ -2480,7 +2484,7 @@ const FuzzTestRunner = struct {...@@ -2480,7 +2484,7 @@ const FuzzTestRunner = struct {
2480 const step_owner = f.run.step.owner;2484 const step_owner = f.run.step.owner;
2481 const arena = step_owner.allocator;2485 const arena = step_owner.allocator;
24822486
2483 // Collect any remaining stderr2487 // Collect any available stderr
2484 while (f.batch.next()) |completion| {2488 while (f.batch.next()) |completion| {
2485 if (completion.index % 3 != 2) continue;2489 if (completion.index % 3 != 2) continue;
2486 const len = completion.result.file_read_streaming catch continue;2490 const len = completion.result.file_read_streaming catch continue;