1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-18 03:44:05 -05:00

fix: panic in request body streaming (#11191)

This commit is contained in:
Luca Casonato 2021-06-30 18:05:58 +02:00 committed by GitHub
parent 3e21ffc935
commit de6e44794b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View file

@ -3,6 +3,7 @@ import {
assert,
assertEquals,
assertThrowsAsync,
deferred,
fail,
unimplemented,
unitTest,
@ -1195,3 +1196,24 @@ unitTest(
assertEquals(response.headers.get("Host"), addr);
},
);
unitTest(
{ perms: { net: true } },
async function fetchNoServerReadableStreamBody() {
const done = deferred();
const body = new ReadableStream({
start(controller) {
controller.enqueue(new Uint8Array([1]));
setTimeout(() => {
controller.enqueue(new Uint8Array([2]));
done.resolve();
}, 1000);
},
});
const nonExistantHostname = "http://localhost:47582";
await assertThrowsAsync(async () => {
await fetch(nonExistantHostname, { body, method: "POST" });
}, TypeError);
await done;
},
);

View file

@ -356,7 +356,9 @@ pub async fn op_fetch_request_write(
.ok_or_else(bad_resource_id)?;
let body = RcRef::map(&resource, |r| &r.body).borrow_mut().await;
let cancel = RcRef::map(resource, |r| &r.cancel);
body.send(Ok(buf)).or_cancel(cancel).await??;
body.send(Ok(buf)).or_cancel(cancel).await?.map_err(|_| {
type_error("request body receiver not connected (request closed)")
})?;
Ok(())
}