aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-05-26 21:18:31 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-05-26 21:18:31 -0700
commit7094997eec556368b895a3668ebf95330306eb97 (patch)
tree5cd953e67ca35a3b6f9443aebd5400ff0190a039
parent79907fe84ceb186ba96b4ac7dff4b7ada47c6850 (diff)
downloadbun-7094997eec556368b895a3668ebf95330306eb97.tar.gz
bun-7094997eec556368b895a3668ebf95330306eb97.tar.zst
bun-7094997eec556368b895a3668ebf95330306eb97.zip
Fix crash in `Server.prototype.fetch()` helper functionbun-v0.6.4
cc @cirospaciari, if you use `mimalloc-debug` it catches things like this
-rw-r--r--src/bun.js/api/server.zig12
-rw-r--r--test/js/bun/http/serve.test.ts1
2 files changed, 9 insertions, 4 deletions
diff --git a/src/bun.js/api/server.zig b/src/bun.js/api/server.zig
index 9af44deba..094f5e385 100644
--- a/src/bun.js/api/server.zig
+++ b/src/bun.js/api/server.zig
@@ -4659,8 +4659,8 @@ pub fn NewServer(comptime ssl_enabled_: bool, comptime debug_mode_: bool) type {
// TODO: set Host header
// TODO: set User-Agent header
if (first_arg.isString()) {
- var url_zig_str = ZigString.init("");
- JSValue.fromRef(arguments[0]).toZigString(&url_zig_str, globalThis);
+ const url_zig_str = JSValue.c(arguments[0]).toSlice(globalThis, bun.default_allocator);
+ defer url_zig_str.deinit();
var temp_url_str = url_zig_str.slice();
if (temp_url_str.len == 0) {
@@ -4706,12 +4706,18 @@ pub fn NewServer(comptime ssl_enabled_: bool, comptime debug_mode_: bool) type {
existing_request = Request{
.url = url.href,
+ .url_was_allocated = true,
.headers = headers,
.body = JSC.WebCore.InitRequestBodyValue(body) catch unreachable,
.method = method,
};
} else if (first_arg.as(Request)) |request_| {
- existing_request = request_.*;
+ request_.cloneInto(
+ &existing_request,
+ bun.default_allocator,
+ globalThis,
+ false,
+ );
} else {
const fetch_error = WebCore.Fetch.fetch_type_error_strings.get(js.JSValueGetType(ctx, arguments[0]));
return JSPromise.rejectedPromiseValue(globalThis, ZigString.init(fetch_error).toErrorInstance(globalThis)).asRef();
diff --git a/test/js/bun/http/serve.test.ts b/test/js/bun/http/serve.test.ts
index 30ad96d1e..73de6a381 100644
--- a/test/js/bun/http/serve.test.ts
+++ b/test/js/bun/http/serve.test.ts
@@ -9,7 +9,6 @@ type Handler = (req: Request) => Response;
afterEach(() => gc(true));
const count = 200;
-let port = 10000;
let server: Server | undefined;
async function runTest({ port, ...serverOptions }: Serve<any>, test: (server: Server) => Promise<void> | void) {