Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit bf69ae1

Browse filesBrowse files
jazellytargos
authored andcommitted
stream: set stream prototype to closest transferable superclass
PR-URL: #55067 Fixes: #54603 Refs: #50107 Reviewed-By: Mattias Buelens <mattias@buelens.com> Reviewed-By: Michaël Zasso <targos@protonmail.com>
1 parent 3304bf3 commit bf69ae1
Copy full SHA for bf69ae1

File tree

Expand file treeCollapse file tree

4 files changed

+20
-0
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

4 files changed

+20
-0
lines changed
Open diff view settings
Collapse file

‎lib/internal/webstreams/readablestream.js‎

Copy file name to clipboardExpand all lines: lib/internal/webstreams/readablestream.js
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,7 @@ ObjectDefineProperties(ReadableStream, {
639639
});
640640

641641
function InternalTransferredReadableStream() {
642+
ObjectSetPrototypeOf(this, ReadableStream.prototype);
642643
markTransferMode(this, false, true);
643644
this[kType] = 'ReadableStream';
644645
this[kState] = createReadableStreamState();
@@ -1226,6 +1227,7 @@ ObjectDefineProperties(ReadableByteStreamController.prototype, {
12261227
});
12271228

12281229
function InternalReadableStream(start, pull, cancel, highWaterMark, size) {
1230+
ObjectSetPrototypeOf(this, ReadableStream.prototype);
12291231
markTransferMode(this, false, true);
12301232
this[kType] = 'ReadableStream';
12311233
this[kState] = createReadableStreamState();
@@ -1253,6 +1255,7 @@ function createReadableStream(start, pull, cancel, highWaterMark = 1, size = ()
12531255
}
12541256

12551257
function InternalReadableByteStream(start, pull, cancel) {
1258+
ObjectSetPrototypeOf(this, ReadableStream.prototype);
12561259
markTransferMode(this, false, true);
12571260
this[kType] = 'ReadableStream';
12581261
this[kState] = createReadableStreamState();
Collapse file

‎lib/internal/webstreams/transformstream.js‎

Copy file name to clipboardExpand all lines: lib/internal/webstreams/transformstream.js
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ ObjectDefineProperties(TransformStream.prototype, {
256256
});
257257

258258
function InternalTransferredTransformStream() {
259+
ObjectSetPrototypeOf(this, TransformStream.prototype);
259260
markTransferMode(this, false, true);
260261
this[kType] = 'TransformStream';
261262
this[kState] = {
Collapse file

‎lib/internal/webstreams/writablestream.js‎

Copy file name to clipboardExpand all lines: lib/internal/webstreams/writablestream.js
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ ObjectDefineProperties(WritableStream.prototype, {
300300
});
301301

302302
function InternalTransferredWritableStream() {
303+
ObjectSetPrototypeOf(this, WritableStream.prototype);
303304
markTransferMode(this, false, true);
304305
this[kType] = 'WritableStream';
305306
this[kState] = createWritableStreamState();
@@ -516,6 +517,7 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, {
516517
});
517518

518519
function InternalWritableStream(start, write, close, abort, highWaterMark, size) {
520+
ObjectSetPrototypeOf(this, WritableStream.prototype);
519521
markTransferMode(this, false, true);
520522
this[kType] = 'WritableStream';
521523
this[kState] = createWritableStreamState();
Collapse file

‎test/parallel/test-structuredClone-global.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-structuredClone-global.js
+14Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,20 @@ assert.strictEqual(structuredClone(undefined, null), undefined);
1616
assert.strictEqual(structuredClone(undefined, { transfer: null }), undefined);
1717
assert.strictEqual(structuredClone(undefined, { }), undefined);
1818

19+
// Transferables or its subclasses should be received with its closest transferable superclass
20+
for (const StreamClass of [ReadableStream, WritableStream, TransformStream]) {
21+
const original = new StreamClass();
22+
const transfer = structuredClone(original, { transfer: [original] });
23+
assert.strictEqual(Object.getPrototypeOf(transfer), StreamClass.prototype);
24+
assert.ok(transfer instanceof StreamClass);
25+
26+
const extended = class extends StreamClass {};
27+
const extendedOriginal = new extended();
28+
const extendedTransfer = structuredClone(extendedOriginal, { transfer: [extendedOriginal] });
29+
assert.strictEqual(Object.getPrototypeOf(extendedTransfer), StreamClass.prototype);
30+
assert.ok(extendedTransfer instanceof StreamClass);
31+
}
32+
1933
{
2034
// See: https://github.com/nodejs/node/issues/49940
2135
const cloned = structuredClone({}, {

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.