diff options
| author | 2022-02-18 14:42:56 -0800 | |
|---|---|---|
| committer | 2022-02-18 14:42:56 -0800 | |
| commit | cafa9cc3e4470f995282e280265029975ce2eb10 (patch) | |
| tree | a57a7d2754c9052140103df681a72a9710246a25 /src | |
| parent | a7181cb222f1b9b9e67c582ecf105864293081d6 (diff) | |
| download | bun-cafa9cc3e4470f995282e280265029975ce2eb10.tar.gz bun-cafa9cc3e4470f995282e280265029975ce2eb10.tar.zst bun-cafa9cc3e4470f995282e280265029975ce2eb10.zip | |
[bun.js] Fix bug with getPublicPath when encountering URLs above the root
Diffstat (limited to 'src')
| -rw-r--r-- | src/javascript/jsc/javascript.zig | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig index 0e0646fb6..0fa8d76ba 100644 --- a/src/javascript/jsc/javascript.zig +++ b/src/javascript/jsc/javascript.zig @@ -610,14 +610,23 @@ pub const Bun = struct { pub fn getPublicPath(to: string, origin: URL, comptime Writer: type, writer: Writer) void { const relative_path = VirtualMachine.vm.bundler.fs.relativeTo(to); if (origin.isAbsolute()) { - origin.joinWrite( - Writer, - writer, - VirtualMachine.vm.bundler.options.routes.asset_prefix_path, - "", - relative_path, - "", - ) catch unreachable; + if (strings.hasPrefix(relative_path, "..") or strings.hasPrefix(relative_path, "./")) { + writer.writeAll(origin.origin) catch return; + writer.writeAll("/abs:") catch return; + if (std.fs.path.isAbsolute(to)) { + writer.writeAll(to) catch return; + } else { + writer.writeAll(VirtualMachine.vm.bundler.fs.abs(&[_]string{to})) catch return; + } + } else { + origin.joinWrite( + Writer, + writer, + VirtualMachine.vm.bundler.options.routes.asset_prefix_path, + "", + relative_path, + "", + ) catch return; } else { writer.writeAll(std.mem.trimLeft(u8, relative_path, "/")) catch unreachable; } |
