Skip to content

Commit 7d0d4ec

Browse files
committed
fixup! buffer: align Blob and File with Web IDL
Keep rejecting bare SharedArrayBuffer for browser compatibility. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
1 parent b157ea9 commit 7d0d4ec

2 files changed

Lines changed: 11 additions & 7 deletions

File tree

‎lib/internal/blob.js‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ const {
5151
} = require('internal/worker/js_transferable');
5252

5353
const {
54+
isAnyArrayBuffer,
5455
isArrayBuffer,
5556
isArrayBufferView,
5657
isDataView,
@@ -155,7 +156,9 @@ const blobPartsConverter = createSequenceConverter((source, opts = kEmptyObject)
155156
if (isBlob(source)) {
156157
return source;
157158
}
158-
if (isArrayBuffer(source) || isArrayBufferView(source)) {
159+
// Match browsers for bare SharedArrayBuffer pending a resolution of
160+
// https://github.com/whatwg/webidl/issues/1491.
161+
if (isAnyArrayBuffer(source) || isArrayBufferView(source)) {
159162
return converters.BufferSource(source, opts);
160163
}
161164
return converters.USVString(source, opts);

‎test/parallel/test-blob-file-webidl.js‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,16 @@ const { Blob, File } = require('node:buffer');
8989
assert.strictEqual(await copied.text(), part === buffer ? 'ABCD' : 'BC');
9090
}
9191

92-
// A bare SharedArrayBuffer falls through to the USVString union member;
93-
// views backed by shared memory still select BufferSource and throw.
94-
assert.strictEqual(await create([new SharedArrayBuffer(4)]).text(),
95-
'[object SharedArrayBuffer]');
96-
for (const view of [
92+
// Reject both bare shared buffers and views for browser compatibility.
93+
for (const part of [
94+
new SharedArrayBuffer(4),
9795
new Uint8Array(new SharedArrayBuffer(4)),
9896
new DataView(new SharedArrayBuffer(4)),
9997
]) {
100-
assert.throws(() => create([view]), TypeError);
98+
assert.throws(() => create([part]), {
99+
name: 'TypeError',
100+
code: 'ERR_INVALID_ARG_TYPE',
101+
});
101102
}
102103
for (const part of [
103104
new ArrayBuffer(4, { maxByteLength: 8 }),

0 commit comments

Comments
 (0)