summaryrefslogtreecommitdiff
path: root/lib/internal
diff options
context:
space:
mode:
Diffstat (limited to 'lib/internal')
-rw-r--r--lib/internal/errors.js3
-rw-r--r--lib/internal/worker.js13
2 files changed, 14 insertions, 2 deletions
diff --git a/lib/internal/errors.js b/lib/internal/errors.js
index 12b01ffb9b..b33cd27109 100644
--- a/lib/internal/errors.js
+++ b/lib/internal/errors.js
@@ -992,6 +992,9 @@ E('ERR_VM_MODULE_NOT_LINKED',
E('ERR_VM_MODULE_NOT_MODULE',
'Provided module is not an instance of Module', Error);
E('ERR_VM_MODULE_STATUS', 'Module status %s', Error);
+E('ERR_WORKER_INVALID_EXEC_ARGV', (errors) =>
+ `Initiated Worker with invalid execArgv flags: ${errors.join(', ')}`,
+ Error);
E('ERR_WORKER_PATH',
'The worker script filename must be an absolute path or a relative ' +
'path starting with \'./\' or \'../\'. Received "%s"',
diff --git a/lib/internal/worker.js b/lib/internal/worker.js
index 2e1568a738..e20a37af8a 100644
--- a/lib/internal/worker.js
+++ b/lib/internal/worker.js
@@ -8,6 +8,8 @@ const {
ERR_WORKER_PATH,
ERR_WORKER_UNSERIALIZABLE_ERROR,
ERR_WORKER_UNSUPPORTED_EXTENSION,
+ ERR_WORKER_INVALID_EXEC_ARGV,
+ ERR_INVALID_ARG_TYPE,
} = require('internal/errors').codes;
const { validateString } = require('internal/validators');
@@ -49,7 +51,11 @@ class Worker extends EventEmitter {
super();
debug(`[${threadId}] create new worker`, filename, options);
validateString(filename, 'filename');
-
+ if (options.execArgv && !Array.isArray(options.execArgv)) {
+ throw new ERR_INVALID_ARG_TYPE('options.execArgv',
+ 'array',
+ options.execArgv);
+ }
if (!options.eval) {
if (!path.isAbsolute(filename) &&
!filename.startsWith('./') &&
@@ -68,7 +74,10 @@ class Worker extends EventEmitter {
const url = options.eval ? null : pathToFileURL(filename);
// Set up the C++ handle for the worker, as well as some internal wiring.
- this[kHandle] = new WorkerImpl(url);
+ this[kHandle] = new WorkerImpl(url, options.execArgv);
+ if (this[kHandle].invalidExecArgv) {
+ throw new ERR_WORKER_INVALID_EXEC_ARGV(this[kHandle].invalidExecArgv);
+ }
this[kHandle].onexit = (code) => this[kOnExit](code);
this[kPort] = this[kHandle].messagePort;
this[kPort].on('message', (data) => this[kOnMessage](data));