diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index 5c5c8da724ace9..eed7b668c0d709 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -2516,6 +2516,15 @@ function readableByteStreamControllerRespondWithNewView(controller, view) { const viewBuffer = ArrayBufferViewGetBuffer(view); const viewBufferByteLength = ArrayBufferGetByteLength(viewBuffer); + if (stream[kState].state === 'closed') { + if (viewByteLength !== 0) + throw new ERR_INVALID_STATE.TypeError('View is not zero-length'); + } else { + assert(stream[kState].state === 'readable'); + if (viewByteLength === 0) + throw new ERR_INVALID_STATE.TypeError('View is zero-length'); + } + const { byteOffset, byteLength, diff --git a/test/wpt/status/streams.json b/test/wpt/status/streams.json index e6fd391a620885..b45fb191f2fcf8 100644 --- a/test/wpt/status/streams.json +++ b/test/wpt/status/streams.json @@ -4,13 +4,5 @@ }, "transferable/deserialize-error.window.js": { "skip": "Browser-specific test" - }, - "readable-byte-streams/bad-buffers-and-views.any.js": { - "fail": { - "note": "TODO: implement detached ArrayBuffer support", - "expected": [ - "ReadableStream with byte source: respondWithNewView() throws if the supplied view's buffer is zero-length (in the readable state)" - ] - } } }