From dae985ab3c8280290fe99ca9982d640a3e6b15ee Mon Sep 17 00:00:00 2001 From: Ashcon Partovi Date: Fri, 1 Dec 2023 16:35:28 -0800 Subject: [PATCH] Fix `Location` header not being cloned from `Response.redirect()` (#7402) * Fix `Location` header not being cloned from `Response.redirect()` * Fix was something else --- src/bun.js/bindings/bindings.cpp | 2 +- test/regression/issue/07397.test.ts | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 test/regression/issue/07397.test.ts diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp index 3a29132023..7fffdce237 100644 --- a/src/bun.js/bindings/bindings.cpp +++ b/src/bun.js/bindings/bindings.cpp @@ -1457,7 +1457,7 @@ void WebCore__FetchHeaders__put_(WebCore__FetchHeaders* headers, const ZigString { auto throwScope = DECLARE_THROW_SCOPE(global->vm()); WebCore::propagateException(*global, throwScope, - headers->set(Zig::toString(*arg1), Zig::toString(*arg2))); + headers->set(Zig::toString(*arg1), Zig::toStringCopy(*arg2))); } void WebCore__FetchHeaders__remove(WebCore__FetchHeaders* headers, const ZigString* arg1, JSC__JSGlobalObject* global) { diff --git a/test/regression/issue/07397.test.ts b/test/regression/issue/07397.test.ts new file mode 100644 index 0000000000..af16f96ffb --- /dev/null +++ b/test/regression/issue/07397.test.ts @@ -0,0 +1,10 @@ +import { test, expect } from "bun:test"; + +test("Response.redirect clones string from Location header", () => { + const url = new URL("http://example.com"); + url.hostname = "example1.com"; + const { href } = url; + expect(href).toBe("http://example1.com/"); + const response = Response.redirect(href); + expect(response.headers.get("Location")).toBe(href); +});