Skip to content

Commit

Permalink
fix(ext/http): gracefully handle Response.error responses (#25712)
Browse files Browse the repository at this point in the history
Fixes #14371
  • Loading branch information
lucacasonato committed Sep 18, 2024
1 parent ab1e391 commit 7a41a93
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
8 changes: 7 additions & 1 deletion ext/http/00_serve.ts
Original file line number Diff line number Diff line change
Expand Up @@ -511,9 +511,15 @@ function mapToCallback(context, callback, onError) {
);
}

if (response.type === "error") {
throw new TypeError(
"Return value from serve handler must not be an error response (like Response.error())",
);
}

if (response.bodyUsed) {
throw new TypeError(
"The body of the Response returned from the serve handler has already been consumed.",
"The body of the Response returned from the serve handler has already been consumed",
);
}
} catch (error) {
Expand Down
34 changes: 34 additions & 0 deletions tests/unit/serve_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -678,6 +678,40 @@ Deno.test(
},
);

Deno.test(
{ permissions: { net: true } },
async function httpServerReturnErrorResponse() {
const ac = new AbortController();
const { promise, resolve } = Promise.withResolvers<void>();
let hadError = false;
const server = Deno.serve({
handler: () => {
return Response.error();
},
port: servePort,
signal: ac.signal,
onListen: onListen(resolve),
onError: () => {
hadError = true;
return new Response("Internal Server Error", { status: 500 });
},
});

await promise;

const resp = await fetch(`http://127.0.0.1:${servePort}/`, {
headers: { "connection": "close" },
});
assertEquals(resp.status, 500);
const text = await resp.text();
assertEquals(text, "Internal Server Error");
assert(hadError);

ac.abort();
await server.finished;
},
);

Deno.test({ permissions: { net: true } }, async function httpServerOverload1() {
const ac = new AbortController();
const deferred = Promise.withResolvers<void>();
Expand Down

0 comments on commit 7a41a93

Please sign in to comment.