diff options
author | cjihrig <cjihrig@gmail.com> | 2019-01-15 14:12:57 -0500 |
---|---|---|
committer | cjihrig <cjihrig@gmail.com> | 2019-02-05 18:50:10 -0500 |
commit | 12b3cfcea686e2bd01c4d17d0835b74710ce950c (patch) | |
tree | 8a41179b93e3ec126b4c416075bfe925d614ec5c /lib | |
parent | 62b4796e369895e614e22bb176702f2499317f4a (diff) | |
download | android-node-v8-12b3cfcea686e2bd01c4d17d0835b74710ce950c.tar.gz android-node-v8-12b3cfcea686e2bd01c4d17d0835b74710ce950c.tar.bz2 android-node-v8-12b3cfcea686e2bd01c4d17d0835b74710ce950c.zip |
process: stub unsupported worker methods
Some process methods are not supported in workers. This commit
adds stubs that throw more informative errors.
PR-URL: https://github.com/nodejs/node/pull/25587
Fixes: https://github.com/nodejs/node/issues/25448
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/internal/bootstrap/node.js | 30 | ||||
-rw-r--r-- | lib/internal/process/worker_thread_only.js | 10 |
2 files changed, 38 insertions, 2 deletions
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index 358c4cb8c7..071b68903d 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -84,6 +84,8 @@ if (isMainThread) { } else { const wrapped = workerThreadSetup.wrapProcessMethods(rawMethods); + process.abort = workerThreadSetup.unavailable('process.abort()'); + process.chdir = workerThreadSetup.unavailable('process.chdir()'); process.umask = wrapped.umask; } @@ -148,6 +150,14 @@ if (credentials.implementsPosixCredentials) { process.seteuid = wrapped.seteuid; process.setgid = wrapped.setgid; process.setuid = wrapped.setuid; + } else { + process.initgroups = + workerThreadSetup.unavailable('process.initgroups()'); + process.setgroups = workerThreadSetup.unavailable('process.setgroups()'); + process.setegid = workerThreadSetup.unavailable('process.setegid()'); + process.seteuid = workerThreadSetup.unavailable('process.seteuid()'); + process.setgid = workerThreadSetup.unavailable('process.setgid()'); + process.setuid = workerThreadSetup.unavailable('process.setuid()'); } } @@ -174,8 +184,24 @@ if (config.hasInspector) { // This attaches some internal event listeners and creates: // process.send(), process.channel, process.connected, // process.disconnect() -if (isMainThread && process.env.NODE_CHANNEL_FD) { - mainThreadSetup.setupChildProcessIpcChannel(); +if (process.env.NODE_CHANNEL_FD) { + if (ownsProcessState) { + mainThreadSetup.setupChildProcessIpcChannel(); + } else { + Object.defineProperty(process, 'channel', { + enumerable: false, + get: workerThreadSetup.unavailable('process.channel') + }); + + Object.defineProperty(process, 'connected', { + enumerable: false, + get: workerThreadSetup.unavailable('process.connected') + }); + + process.send = workerThreadSetup.unavailable('process.send()'); + process.disconnect = + workerThreadSetup.unavailable('process.disconnect()'); + } } const browserGlobals = !process._noBrowserGlobals; diff --git a/lib/internal/process/worker_thread_only.js b/lib/internal/process/worker_thread_only.js index f05d5e932b..2cc52cbf01 100644 --- a/lib/internal/process/worker_thread_only.js +++ b/lib/internal/process/worker_thread_only.js @@ -45,7 +45,17 @@ function wrapProcessMethods(binding) { return { umask }; } +function unavailable(name) { + function unavailableInWorker() { + throw new ERR_WORKER_UNSUPPORTED_OPERATION(name); + } + + unavailableInWorker.disabled = true; + return unavailableInWorker; +} + module.exports = { initializeWorkerStdio, + unavailable, wrapProcessMethods }; |