mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(ext/file): resolve unresolved Promise in Blob.stream (#20039)
This PR fixes some crashing WPT tests due to an unresolved promise. --- This could be a [stream spec](https://streams.spec.whatwg.org) bug When `controller.close` is called on a byob stream, there's no cleanup of pending `readIntoRequests`. The only cleanup of pending `readIntoRequests` happen when `.byobRequest.respond(0)` is called, it happens here:6ba245fe25/ext/web/06_streams.js (L2026)
which ends up calling `readIntoRequest.closeSteps(chunk);` in6ba245fe25/ext/web/06_streams.js (L2070)
To reproduce: ```js async function byobRead() { const input = [new Uint8Array([8, 241, 48, 123, 151])]; const stream = new ReadableStream({ type: "bytes", async pull(controller) { if(input.length === 0) { controller.close(); // controller.byobRequest.respond(0); // uncomment for fix return } controller.enqueue(input.shift()) }, }); const reader = stream.getReader({ mode: 'byob' }); const r1 = await reader.read(new Uint8Array(64)); console.log(r1); const r2 = await reader.read(new Uint8Array(64)); console.log(r2); } await byobRead(); ``` Running the script triggers: ``` error: Top-level await promise never resolved ```
This commit is contained in:
parent
53ab6c004a
commit
5311f69bbb
2 changed files with 17 additions and 5 deletions
|
@ -366,7 +366,11 @@ class Blob {
|
|||
const { value, done } = await AsyncGeneratorPrototypeNext(
|
||||
partIterator,
|
||||
);
|
||||
if (done) return controller.close();
|
||||
if (done) {
|
||||
controller.close();
|
||||
controller.byobRequest?.respond(0);
|
||||
return;
|
||||
}
|
||||
if (TypedArrayPrototypeGetByteLength(value) > 0) {
|
||||
return controller.enqueue(value);
|
||||
}
|
||||
|
|
|
@ -4414,8 +4414,16 @@
|
|||
"response-consume-empty.any.worker.html": [
|
||||
"Consume empty FormData response body as text"
|
||||
],
|
||||
"response-consume-stream.any.html": false,
|
||||
"response-consume-stream.any.worker.html": false,
|
||||
"response-consume-stream.any.html": [
|
||||
"Read text response's body as readableStream with mode=byob",
|
||||
"Read URLSearchParams response's body as readableStream with mode=byob",
|
||||
"Read array buffer response's body as readableStream with mode=byob"
|
||||
],
|
||||
"response-consume-stream.any.worker.html": [
|
||||
"Read text response's body as readableStream with mode=byob",
|
||||
"Read URLSearchParams response's body as readableStream with mode=byob",
|
||||
"Read array buffer response's body as readableStream with mode=byob"
|
||||
],
|
||||
"response-init-contenttype.any.html": true,
|
||||
"response-init-contenttype.any.worker.html": true,
|
||||
"response-static-json.any.html": true,
|
||||
|
@ -5770,8 +5778,8 @@
|
|||
"Blob-slice-overflow.any.worker.html": true,
|
||||
"Blob-slice.any.html": true,
|
||||
"Blob-slice.any.worker.html": true,
|
||||
"Blob-stream.any.html": false,
|
||||
"Blob-stream.any.worker.html": false,
|
||||
"Blob-stream.any.html": true,
|
||||
"Blob-stream.any.worker.html": true,
|
||||
"Blob-text.any.html": true,
|
||||
"Blob-text.any.worker.html": true,
|
||||
"Blob-in-worker.worker.html": true,
|
||||
|
|
Loading…
Reference in a new issue