GeezerVison is showing github.com — stream: reject duplicate nested transferables · nodejs/node@cfb1fa9
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: src/node_messaging.cc +7-2Lines changed: 7 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -415,10 +415,15 @@ class SerializerDelegate : public ValueSerializer::Delegate { | 415 | 415 | if (!host_objects_[i]->NestedTransferables().To(&nested_transferables)) | 416 | 416 | return Nothing<bool>(); | 417 | 417 | for (auto& nested_transferable : nested_transferables) { | 418 | | - if (std::ranges::find(host_objects_, nested_transferable) == | | 418 | + if (std::ranges::find(host_objects_, nested_transferable) != | 419 | 419 | host_objects_.end()) { | 420 | | - AddHostObject(nested_transferable); | | 420 | + ThrowDataCloneException( | | 421 | + context_, | | 422 | + FIXED_ONE_BYTE_STRING(env_->isolate(), | | 423 | + "The transfer list is invalid.")); | | 424 | + return Nothing<bool>(); | 421 | 425 | } | | 426 | + AddHostObject(nested_transferable); | 422 | 427 | } | 423 | 428 | } | 424 | 429 | return Just(true); | |
Collapse file Copy file name to clipboard +19Lines changed: 19 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 1 | +'use strict'; | | 2 | + | | 3 | +require('../common'); | | 4 | +const assert = require('node:assert'); | | 5 | + | | 6 | +const combinations = [ | | 7 | + ((t) => [t, t.readable])(new TransformStream()), | | 8 | + ((t) => [t.readable, t])(new TransformStream()), | | 9 | + ((t) => [t, t.writable])(new TransformStream()), | | 10 | + ((t) => [t.writable, t])(new TransformStream()), | | 11 | +]; | | 12 | + | | 13 | +for (const combination of combinations) { | | 14 | + assert.throws(() => structuredClone(combination, { transfer: combination }), { | | 15 | + constructor: DOMException, | | 16 | + name: 'DataCloneError', | | 17 | + code: 25, | | 18 | + }); | | 19 | +} |
Collapse file Copy file name to clipboardExpand all lines: test/wpt/status/streams.json -8Lines changed: 0 additions & 8 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 41 | 41 | "transferable/transfer-with-messageport.window.js": { | 42 | 42 | "skip": "Browser-specific test" | 43 | 43 | }, | 44 | | - "transferable/transform-stream-members.any.js": { | 45 | | - "fail": { | 46 | | - "expected": [ | 47 | | - "Transferring [object TransformStream],[object ReadableStream] should fail", | 48 | | - "Transferring [object TransformStream],[object WritableStream] should fail" | 49 | | - ] | 50 | | - } | 51 | | - }, | 52 | 44 | "transform-streams/invalid-realm.tentative.window.js": { | 53 | 45 | "skip": "Browser-specific test" | 54 | 46 | } | |
|