diff options
Diffstat (limited to 'lib/internal')
-rw-r--r-- | lib/internal/errors.js | 3 | ||||
-rw-r--r-- | lib/internal/worker.js | 13 |
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)); |