diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-08-05 17:05:01 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-08-07 00:48:32 -0700 |
| commit | bfc2ee03e5b9fa74b047f41ff78d671f53fc7c79 (patch) | |
| tree | 8afae8bd921f8dc1624fcc6354ece09bdffb77f5 /lib/std/Build | |
| parent | 38227e92898a049412ddaab6c8596218d32db650 (diff) | |
| download | zig-bfc2ee03e5b9fa74b047f41ff78d671f53fc7c79.tar.gz zig-bfc2ee03e5b9fa74b047f41ff78d671f53fc7c79.zip | |
fuzzer web ui: resolve cwd in sources.tar
because the wasm code needs to string match against debug information
Diffstat (limited to 'lib/std/Build')
| -rw-r--r-- | lib/std/Build/Fuzz/WebServer.zig | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/std/Build/Fuzz/WebServer.zig b/lib/std/Build/Fuzz/WebServer.zig index 06514f2486..3ae37c2109 100644 --- a/lib/std/Build/Fuzz/WebServer.zig +++ b/lib/std/Build/Fuzz/WebServer.zig @@ -485,6 +485,8 @@ fn serveSourcesTar(ws: *WebServer, request: *std.http.Server.Request) !void { }; std.mem.sortUnstable(Build.Cache.Path, deduped_paths, SortContext{}, SortContext.lessThan); + var cwd_cache: ?[]const u8 = null; + for (deduped_paths) |joined_path| { var file = joined_path.root_dir.handle.openFile(joined_path.sub_path, .{}) catch |err| { log.err("failed to open {}: {s}", .{ joined_path, @errorName(err) }); @@ -506,7 +508,10 @@ fn serveSourcesTar(ws: *WebServer, request: *std.http.Server.Request) !void { var file_header = std.tar.output.Header.init(); file_header.typeflag = .regular; - try file_header.setPath(joined_path.root_dir.path orelse ".", joined_path.sub_path); + try file_header.setPath( + joined_path.root_dir.path orelse try memoizedCwd(arena, &cwd_cache), + joined_path.sub_path, + ); try file_header.setSize(stat.size); try file_header.updateChecksum(); try w.writeAll(std.mem.asBytes(&file_header)); @@ -519,6 +524,13 @@ fn serveSourcesTar(ws: *WebServer, request: *std.http.Server.Request) !void { try response.end(); } +fn memoizedCwd(arena: Allocator, opt_ptr: *?[]const u8) ![]const u8 { + if (opt_ptr.*) |cached| return cached; + const result = try std.process.getCwdAlloc(arena); + opt_ptr.* = result; + return result; +} + const cache_control_header: std.http.Header = .{ .name = "cache-control", .value = "max-age=0, must-revalidate", |
