summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2019-01-15 14:12:57 -0500
committercjihrig <cjihrig@gmail.com>2019-02-05 18:50:10 -0500
commit12b3cfcea686e2bd01c4d17d0835b74710ce950c (patch)
tree8a41179b93e3ec126b4c416075bfe925d614ec5c /lib
parent62b4796e369895e614e22bb176702f2499317f4a (diff)
downloadandroid-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.js30
-rw-r--r--lib/internal/process/worker_thread_only.js10
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
};