From d41a8e05296d5653e777a5dafa1712c6fcc6e92b Mon Sep 17 00:00:00 2001 From: Jeong SeokChan Date: Mon, 31 Aug 2026 17:40:46 +0900 Subject: [PATCH] stream: reject primitive values in ReadableStream.from Reject non-object inputs before looking up iterator methods in ReadableStream.from(). This matches the Web IDL async sequence conversion and prevents primitive strings from being accepted through property-access boxing. This fixes the WPT test: "ReadableStream.from throws on invalid iterables; specifically a string" Refs: https://webidl.spec.whatwg.org/#es-sequence Signed-off-by: Jeong SeokChan --- lib/internal/webstreams/readablestream.js | 5 +++++ test/wpt/status/streams.json | 7 ------- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index 78313bd03c1a..41ce73ae156e 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -1438,6 +1438,11 @@ function createReadableStreamState() { } function readableStreamFromIterable(iterable) { + if (iterable === null || + (typeof iterable !== 'object' && typeof iterable !== 'function')) { + throw new ERR_ARG_NOT_ITERABLE(iterable); + } + let stream; const iteratorGetter = iterable[SymbolAsyncIterator] ?? iterable[SymbolIterator]; if (iteratorGetter == null || typeof iteratorGetter !== 'function') { diff --git a/test/wpt/status/streams.json b/test/wpt/status/streams.json index 5be444999b00..65ba991136b5 100644 --- a/test/wpt/status/streams.json +++ b/test/wpt/status/streams.json @@ -8,13 +8,6 @@ "readable-streams/cross-realm-crash.window.js": { "skip": "Browser-specific test" }, - "readable-streams/from.any.js": { - "fail": { - "expected": [ - "ReadableStream.from throws on invalid iterables; specifically a string" - ] - } - }, "readable-streams/owning-type-message-port.tentative.any.js": { "fail": { "note": "Readable streams with type owning are not yet supported",