mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 07:44:48 -05:00
fix(ext/flash): Always send correct number of bytes when handling HEAD requests (#17740)
This was not caught in the previous test case, as the response body was smaller than the size of `HEAD` response. This made `nwritten < responseLen` check in `writeFixedResponse` to fail, and not trigger `op_flash_respond_async` as a result. When the response body is larger than the `HEAD` though, as in the updated test case (`HEAD` i 120 bytes, where our response is 300 bytes), it would think that we still have something to send, and effectively panic, as `op_flash_respond` already removed the request from the pool. This change, makes the `handleResponse` function always calculate the number of bytes to transmit when `HEAD` request is encountered. Effectively ignoring `Content-Length` of the body, but still setting it correctly in the request header itself. Fixes https://github.com/denoland/deno/issues/17737
This commit is contained in:
parent
bbcb144a6d
commit
d4e5a295f2
2 changed files with 5 additions and 3 deletions
|
@ -1701,7 +1701,7 @@ Deno.test(
|
|||
const server = Deno.serve({
|
||||
handler: () => {
|
||||
promise.resolve();
|
||||
return new Response("foo bar baz");
|
||||
return new Response("NaN".repeat(100));
|
||||
},
|
||||
port: 4503,
|
||||
signal: ac.signal,
|
||||
|
@ -1726,7 +1726,7 @@ Deno.test(
|
|||
assert(readResult);
|
||||
const msg = decoder.decode(buf.subarray(0, readResult));
|
||||
|
||||
assert(msg.endsWith("Content-Length: 11\r\n\r\n"));
|
||||
assert(msg.endsWith("Content-Length: 300\r\n\r\n"));
|
||||
|
||||
conn.close();
|
||||
|
||||
|
|
|
@ -316,11 +316,13 @@ async function handleResponse(
|
|||
respBody,
|
||||
length,
|
||||
);
|
||||
// A HEAD request always ignores body, but includes the correct content-length size.
|
||||
const responseLen = method === 1 ? core.byteLength(responseStr) : length;
|
||||
writeFixedResponse(
|
||||
serverId,
|
||||
i,
|
||||
responseStr,
|
||||
length,
|
||||
responseLen,
|
||||
!ws, // Don't close socket if there is a deferred websocket upgrade.
|
||||
respondFast,
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue