stream: improve `respondWithNewView()` · nodejs/node@2266a4b · GitHub
Skip to content

Commit 2266a4b

Browse files
daeyeondanielleadams
authored andcommitted
stream: improve respondWithNewView()
This fixes validating an ArrayBufferView given to ReadableStreamBYOBRequest.respondWithNewView() to improve the web streams compatibility. Signed-off-by: Daeyeon Jeong daeyeon.dev@gmail.com PR-URL: #43866 Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent 81a2194 commit 2266a4b

3 files changed

Lines changed: 79 additions & 0 deletions

File tree

lib/internal/webstreams/readablestream.js

Lines changed: 5 additions & 0 deletions

lib/internal/webstreams/util.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const {
1414
PromiseReject,
1515
ReflectGet,
1616
Symbol,
17+
Uint8Array,
1718
} = primordials;
1819

1920
const {
@@ -128,6 +129,24 @@ function transferArrayBuffer(buffer) {
128129
return res;
129130
}
130131

132+
function isArrayBufferDetached(buffer) {
133+
if (ArrayBufferGetByteLength(buffer) === 0) {
134+
try {
135+
new Uint8Array(buffer);
136+
} catch {
137+
return true;
138+
}
139+
}
140+
return false;
141+
}
142+
143+
function isViewedArrayBufferDetached(view) {
144+
return (
145+
ArrayBufferViewGetByteLength(view) === 0 &&
146+
isArrayBufferDetached(ArrayBufferViewGetBuffer(view))
147+
);
148+
}
149+
131150
function dequeueValue(controller) {
132151
assert(controller[kState].queue !== undefined);
133152
assert(controller[kState].queueTotalSize !== undefined);
@@ -225,6 +244,7 @@ module.exports = {
225244
lazyTransfer,
226245
isBrandCheck,
227246
isPromisePending,
247+
isViewedArrayBufferDetached,
228248
peekQueueValue,
229249
resetQueue,
230250
setPromiseHandled,
Lines changed: 54 additions & 0 deletions

0 commit comments

Comments
 (0)