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); +});