Skip to content

Commit

Permalink
src: add buildflag to force context-aware addons
Browse files Browse the repository at this point in the history
PR-URL: #29631
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
  • Loading branch information
codebytere authored and BridgeAR committed Oct 9, 2019
1 parent 3d88b76 commit 6bfe8f4
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 0 deletions.
8 changes: 8 additions & 0 deletions doc/api/cli.md
Expand Up @@ -439,6 +439,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
Expand Down Expand Up @@ -1009,6 +1016,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`
Expand Down
5 changes: 5 additions & 0 deletions doc/api/errors.md
Expand Up @@ -1609,6 +1609,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

Expand Down
8 changes: 8 additions & 0 deletions 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"
Expand Down Expand Up @@ -463,6 +464,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 {
Expand Down
3 changes: 3 additions & 0 deletions src/node_errors.h
Expand Up @@ -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) \
Expand Down Expand Up @@ -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, \
Expand Down
4 changes: 4 additions & 0 deletions src/node_options.cc
Expand Up @@ -400,6 +400,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,
Expand Down
1 change: 1 addition & 0 deletions src/node_options.h
Expand Up @@ -118,6 +118,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;
Expand Down

0 comments on commit 6bfe8f4

Please sign in to comment.