diff options
author | Shelley Vohr <shelley.vohr@gmail.com> | 2019-09-19 22:16:04 -0700 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2019-09-24 22:49:33 -0700 |
commit | 3c17f160e39d96d6e29b3e379bdf20169bacd75f (patch) | |
tree | 657dbcb10e25af817f6518a4a96927f05e8fec5c | |
parent | 5058c7f13838801cdc1155227f9aa7267507b49a (diff) | |
download | android-node-v8-3c17f160e39d96d6e29b3e379bdf20169bacd75f.tar.gz android-node-v8-3c17f160e39d96d6e29b3e379bdf20169bacd75f.tar.bz2 android-node-v8-3c17f160e39d96d6e29b3e379bdf20169bacd75f.zip |
src: add buildflag to force context-aware addons
PR-URL: https://github.com/nodejs/node/pull/29631
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
-rw-r--r-- | doc/api/cli.md | 8 | ||||
-rw-r--r-- | doc/api/errors.md | 5 | ||||
-rw-r--r-- | src/node_binding.cc | 8 | ||||
-rw-r--r-- | src/node_errors.h | 3 | ||||
-rw-r--r-- | src/node_options.cc | 4 | ||||
-rw-r--r-- | src/node_options.h | 1 |
6 files changed, 29 insertions, 0 deletions
diff --git a/doc/api/cli.md b/doc/api/cli.md index 8a1ca4893a..f6eabf137d 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -411,6 +411,13 @@ added: v6.0.0 Silence all process warnings (including deprecations). +### `--force-context-aware` +<!-- YAML +added: REPLACEME +--> + +Disable loading non-context-aware native addons. + ### `--openssl-config=file` <!-- YAML added: v6.9.0 @@ -980,6 +987,7 @@ Node.js options that are allowed are: * `--experimental-report` * `--experimental-vm-modules` * `--experimental-wasm-modules` +* `--force-context-aware` * `--force-fips` * `--frozen-intrinsics` * `--heapsnapshot-signal` diff --git a/doc/api/errors.md b/doc/api/errors.md index 989811fea9..34412648b3 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -1611,6 +1611,11 @@ OpenSSL crypto support. An attempt was made to use features that require [ICU][], but Node.js was not compiled with ICU support. +<a id="ERR_NON_CONTEXT_AWARE_DISABLED"></a> +### ERR_NON_CONTEXT_AWARE_DISABLED + +A non-context-aware native addon was loaded in a process that disallows them. + <a id="ERR_OUT_OF_RANGE"></a> ### ERR_OUT_OF_RANGE diff --git a/src/node_binding.cc b/src/node_binding.cc index a2790d42aa..2deefefb65 100644 --- a/src/node_binding.cc +++ b/src/node_binding.cc @@ -1,4 +1,5 @@ #include "node_binding.h" +#include "node_errors.h" #include <atomic> #include "env-inl.h" #include "node_native_module_env.h" @@ -462,6 +463,13 @@ void DLOpen(const FunctionCallbackInfo<Value>& args) { } if (mp != nullptr) { + if (mp->nm_context_register_func == nullptr) { + if (env->options()->force_context_aware) { + dlib->Close(); + THROW_ERR_NON_CONTEXT_AWARE_DISABLED(env); + return false; + } + } mp->nm_dso_handle = dlib->handle_; dlib->SaveInGlobalHandleMap(mp); } else { diff --git a/src/node_errors.h b/src/node_errors.h index 261c6077bb..f6fca6c690 100644 --- a/src/node_errors.h +++ b/src/node_errors.h @@ -52,6 +52,7 @@ void PrintErrorString(const char* format, ...); V(ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST, TypeError) \ V(ERR_MISSING_PASSPHRASE, TypeError) \ V(ERR_MISSING_PLATFORM_FOR_WORKER, Error) \ + V(ERR_NON_CONTEXT_AWARE_DISABLED, Error) \ V(ERR_MODULE_NOT_FOUND, Error) \ V(ERR_OUT_OF_RANGE, RangeError) \ V(ERR_SCRIPT_EXECUTION_INTERRUPTED, Error) \ @@ -96,6 +97,8 @@ void PrintErrorString(const char* format, ...); V(ERR_MISSING_PLATFORM_FOR_WORKER, \ "The V8 platform used by this instance of Node does not support " \ "creating Workers") \ + V(ERR_NON_CONTEXT_AWARE_DISABLED, \ + "Loading non context-aware native modules has been disabled") \ V(ERR_SCRIPT_EXECUTION_INTERRUPTED, \ "Script execution was interrupted by `SIGINT`") \ V(ERR_TRANSFERRING_EXTERNALIZED_SHAREDARRAYBUFFER, \ diff --git a/src/node_options.cc b/src/node_options.cc index 8a88902513..005f0d2e1e 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -385,6 +385,10 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { "silence all process warnings", &EnvironmentOptions::no_warnings, kAllowedInEnvironment); + AddOption("--force-context-aware", + "disable loading non-context-aware addons", + &EnvironmentOptions::force_context_aware, + kAllowedInEnvironment); AddOption("--pending-deprecation", "emit pending deprecation warnings", &EnvironmentOptions::pending_deprecation, diff --git a/src/node_options.h b/src/node_options.h index 161f9e76a0..780e669eb6 100644 --- a/src/node_options.h +++ b/src/node_options.h @@ -116,6 +116,7 @@ class EnvironmentOptions : public Options { bool no_deprecation = false; bool no_force_async_hooks_checks = false; bool no_warnings = false; + bool force_context_aware = false; bool pending_deprecation = false; bool preserve_symlinks = false; bool preserve_symlinks_main = false; |