diff options
author | Anna Henningsen <anna@addaleax.net> | 2019-01-30 14:57:24 +0100 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2019-02-01 16:09:22 +0100 |
commit | 0ff0af534ef150820ac218b6ef3614dc199de823 (patch) | |
tree | 09f3d164541ee063f5112a6d3642d633f99e7acb /test | |
parent | 7c8ac5a01b4ba5d4c7060875ea024e6efbc12893 (diff) | |
download | android-node-v8-0ff0af534ef150820ac218b6ef3614dc199de823.tar.gz android-node-v8-0ff0af534ef150820ac218b6ef3614dc199de823.tar.bz2 android-node-v8-0ff0af534ef150820ac218b6ef3614dc199de823.zip |
worker: throw for duplicates in transfer list
Throw a `DataCloneError` exception when encountering duplicate
`ArrayBuffer`s or `MessagePort`s in the transfer list.
Fixes: https://github.com/nodejs/node/issues/25786
PR-URL: https://github.com/nodejs/node/pull/25815
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/parallel/test-worker-message-port-transfer-duplicate.js | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/test/parallel/test-worker-message-port-transfer-duplicate.js b/test/parallel/test-worker-message-port-transfer-duplicate.js new file mode 100644 index 0000000000..c893556d8d --- /dev/null +++ b/test/parallel/test-worker-message-port-transfer-duplicate.js @@ -0,0 +1,29 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const { MessageChannel } = require('worker_threads'); + +// Test that passing duplicate transferrables in the transfer list throws +// DataCloneError exceptions. + +{ + const { port1, port2 } = new MessageChannel(); + port2.once('message', common.mustNotCall()); + + const port3 = new MessageChannel().port1; + assert.throws(() => { + port1.postMessage(port3, [port3, port3]); + }, /^DataCloneError: Transfer list contains duplicate MessagePort$/); + port1.close(); +} + +{ + const { port1, port2 } = new MessageChannel(); + port2.once('message', common.mustNotCall()); + + const buf = new Uint8Array(10); + assert.throws(() => { + port1.postMessage(buf, [buf.buffer, buf.buffer]); + }, /^DataCloneError: Transfer list contains duplicate ArrayBuffer$/); + port1.close(); +} |