1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-25 00:29:09 -05:00

fix: release ReadeableStream in fetch (#17365)

Fixes #16648

---------

Co-authored-by: Aapo Alasuutari <aapo.alasuutari@gmail.com>
This commit is contained in:
Leo Kettmeir 2023-08-16 14:02:15 +02:00 committed by Divy Srivastava
parent 75ea2c1b20
commit 3dab9ead27
2 changed files with 28 additions and 0 deletions

View file

@ -1951,6 +1951,33 @@ Deno.test(
}, },
); );
Deno.test(
{ permissions: { net: true } },
async function fetchRequestBodyEmptyStream() {
const body = new ReadableStream({
start(controller) {
controller.enqueue(new Uint8Array([]));
controller.close();
},
});
await assertRejects(
async () => {
const controller = new AbortController();
const promise = fetch("http://localhost:4545/echo_server", {
body,
method: "POST",
signal: controller.signal,
});
controller.abort();
await promise;
},
DOMException,
"The signal has been aborted",
);
},
);
Deno.test("Request with subarray TypedArray body", async () => { Deno.test("Request with subarray TypedArray body", async () => {
const body = new Uint8Array([1, 2, 3, 4, 5]).subarray(1); const body = new Uint8Array([1, 2, 3, 4, 5]).subarray(1);
const req = new Request("https://example.com", { method: "POST", body }); const req = new Request("https://example.com", { method: "POST", body });

View file

@ -268,6 +268,7 @@ async function mainFetch(req, recursive, terminator) {
} }
} }
WeakMapPrototypeDelete(requestBodyReaders, req); WeakMapPrototypeDelete(requestBodyReaders, req);
reader.releaseLock();
core.tryClose(requestBodyRid); core.tryClose(requestBodyRid);
})(); })();
} }