mirror of
https://github.com/oven-sh/bun
synced 2026-02-16 22:01:47 +00:00
Fix error handler
This commit is contained in:
17
bench/fetch/bun.js
Normal file
17
bench/fetch/bun.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import { bench, run } from "mitata";
|
||||
|
||||
const count = 100;
|
||||
|
||||
bench(`fetch(https://example.com) x ${count}`, async () => {
|
||||
const requests = new Array(count);
|
||||
|
||||
for (let i = 0; i < requests.length; i++) {
|
||||
requests[i] = fetch(`https://www.example.com/?cachebust=${i}`).then((r) =>
|
||||
r.text()
|
||||
);
|
||||
}
|
||||
|
||||
await Promise.all(requests);
|
||||
});
|
||||
|
||||
await run();
|
||||
17
bench/fetch/deno.js
Normal file
17
bench/fetch/deno.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import { bench, run } from "https://esm.run/mitata";
|
||||
|
||||
const count = 100;
|
||||
|
||||
bench(`fetch(https://example.com) x ${count}`, async () => {
|
||||
const requests = new Array(count);
|
||||
|
||||
for (let i = 0; i < requests.length; i++) {
|
||||
requests[i] = fetch(`https://www.example.com/?cachebust=${i}`).then((r) =>
|
||||
r.text()
|
||||
);
|
||||
}
|
||||
|
||||
await Promise.all(requests);
|
||||
});
|
||||
|
||||
await run();
|
||||
17
bench/fetch/node.mjs
Normal file
17
bench/fetch/node.mjs
Normal file
@@ -0,0 +1,17 @@
|
||||
import { bench, run } from "mitata";
|
||||
|
||||
const count = 100;
|
||||
|
||||
bench(`fetch(https://example.com) x ${count}`, async () => {
|
||||
const requests = new Array(count);
|
||||
|
||||
for (let i = 0; i < requests.length; i++) {
|
||||
requests[i] = fetch(`https://www.example.com/?cachebust=${i}`).then((r) =>
|
||||
r.text()
|
||||
);
|
||||
}
|
||||
|
||||
await Promise.all(requests);
|
||||
});
|
||||
|
||||
await run();
|
||||
@@ -3644,13 +3644,11 @@ pub fn NewServer(comptime ssl_enabled_: bool, comptime debug_mode_: bool) type {
|
||||
if (upgrader.aborted) {
|
||||
return JSC.jsBoolean(false);
|
||||
}
|
||||
request.upgrader = null;
|
||||
|
||||
if (upgrader.upgrade_context == null or @ptrToInt(upgrader.upgrade_context) == std.math.maxInt(usize)) {
|
||||
return JSC.jsBoolean(false);
|
||||
}
|
||||
var ctx = upgrader.upgrade_context.?;
|
||||
// obviously invalid pointer marks it as used
|
||||
upgrader.upgrade_context = @intToPtr(*uws.uws_socket_context_s, std.math.maxInt(usize));
|
||||
|
||||
var sec_websocket_key_str = ZigString.Empty;
|
||||
|
||||
@@ -3736,6 +3734,13 @@ pub fn NewServer(comptime ssl_enabled_: bool, comptime debug_mode_: bool) type {
|
||||
}
|
||||
}
|
||||
|
||||
// --- After this point, do not throw an exception
|
||||
// See https://github.com/oven-sh/bun/issues/1339
|
||||
|
||||
// obviously invalid pointer marks it as used
|
||||
upgrader.upgrade_context = @intToPtr(*uws.uws_socket_context_s, std.math.maxInt(usize));
|
||||
request.upgrader = null;
|
||||
|
||||
upgrader.resp.clearAborted();
|
||||
var ws = this.vm.allocator.create(ServerWebSocket) catch return .zero;
|
||||
ws.* = .{
|
||||
|
||||
@@ -53,6 +53,46 @@ describe("websocket server", () => {
|
||||
});
|
||||
server.stop();
|
||||
});
|
||||
|
||||
it("headers error doesn't crash", async () => {
|
||||
var resolve, reject;
|
||||
var server = serve({
|
||||
port: getPort(),
|
||||
websocket: {
|
||||
open(ws) {},
|
||||
message(ws, msg) {},
|
||||
close() {
|
||||
resolve();
|
||||
},
|
||||
},
|
||||
error(err) {
|
||||
resolve();
|
||||
},
|
||||
fetch(req, server) {
|
||||
if (
|
||||
server.upgrade(req, {
|
||||
data: "hello world",
|
||||
|
||||
headers: 1238,
|
||||
})
|
||||
) {
|
||||
reject();
|
||||
return;
|
||||
}
|
||||
reject();
|
||||
return new Response("noooooo hello world");
|
||||
},
|
||||
});
|
||||
|
||||
await new Promise((resolve_, reject) => {
|
||||
resolve = resolve_;
|
||||
const websocket = new WebSocket(`ws://localhost:${server.port}`);
|
||||
websocket.onopen = () => websocket.close();
|
||||
websocket.onmessage = (e) => {};
|
||||
websocket.onerror = (e) => {};
|
||||
});
|
||||
server.stop();
|
||||
});
|
||||
it("can do hello world", async () => {
|
||||
var server = serve({
|
||||
port: getPort(),
|
||||
|
||||
Reference in New Issue
Block a user