summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-01-30 14:57:24 +0100
committerAnna Henningsen <anna@addaleax.net>2019-02-01 16:09:22 +0100
commit0ff0af534ef150820ac218b6ef3614dc199de823 (patch)
tree09f3d164541ee063f5112a6d3642d633f99e7acb /test
parent7c8ac5a01b4ba5d4c7060875ea024e6efbc12893 (diff)
downloadandroid-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.js29
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();
+}