summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShelley Vohr <shelley.vohr@gmail.com>2019-09-19 22:16:04 -0700
committerRich Trott <rtrott@gmail.com>2019-09-24 22:49:33 -0700
commit3c17f160e39d96d6e29b3e379bdf20169bacd75f (patch)
tree657dbcb10e25af817f6518a4a96927f05e8fec5c
parent5058c7f13838801cdc1155227f9aa7267507b49a (diff)
downloadandroid-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.md8
-rw-r--r--doc/api/errors.md5
-rw-r--r--src/node_binding.cc8
-rw-r--r--src/node_errors.h3
-rw-r--r--src/node_options.cc4
-rw-r--r--src/node_options.h1
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;