aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-18 14:42:56 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-18 14:42:56 -0800
commitcafa9cc3e4470f995282e280265029975ce2eb10 (patch)
treea57a7d2754c9052140103df681a72a9710246a25 /src
parenta7181cb222f1b9b9e67c582ecf105864293081d6 (diff)
downloadbun-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.zig25
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;
}