Skip to content

Commit

Permalink
src: fix external module env and kDisableNodeOptionsEnv
Browse files Browse the repository at this point in the history
  • Loading branch information
RafaelGSS committed May 8, 2024
1 parent 951af83 commit fce6acc
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 2 deletions.
7 changes: 7 additions & 0 deletions doc/api/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -2780,6 +2780,13 @@ equivalent to using the `--redirect-warnings=file` command-line flag.
added:
- v13.0.0
- v12.16.0
changes:
- version:
- REPLACEME
pr-url: TBD

Check warning on line 2786 in doc/api/cli.md

View workflow job for this annotation

GitHub Actions / lint-pr-url

pr-url doesn't match the URL of the current PR.
description:
Remove the possibility to use this env var with
kDisableNodeOptionsEnv for embedders.
-->

Path to a Node.js module which will be loaded in place of the built-in REPL.
Expand Down
9 changes: 9 additions & 0 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -896,6 +896,15 @@ static ExitCode InitializeNodeWithArgsInternal(
&env_argv, nullptr, errors, kAllowedInEnvvar);
if (exit_code != ExitCode::kNoFailure) return exit_code;
}
} else {
std::string node_repl_external_env = {};
if (credentials::SafeGetenv("NODE_REPL_EXTERNAL_MODULE",
&node_repl_external_env) ||
!node_repl_external_env.empty()) {
errors->emplace_back("NODE_REPL_EXTERNAL_MODULE can't be used with "
"kDisableNodeOptionsEnv");
return ExitCode::kBootstrapFailure;
}
}
#endif

Expand Down
7 changes: 5 additions & 2 deletions test/embedding/embedtest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,11 @@ int main(int argc, char** argv) {
std::shared_ptr<node::InitializationResult> result =
node::InitializeOncePerProcess(
args,
{node::ProcessInitializationFlags::kNoInitializeV8,
node::ProcessInitializationFlags::kNoInitializeNodeV8Platform});
{
node::ProcessInitializationFlags::kNoInitializeV8,
node::ProcessInitializationFlags::kNoInitializeNodeV8Platform,
node::ProcessInitializationFlags::kDisableNodeOptionsEnv,
});

for (const std::string& error : result->errors())
fprintf(stderr, "%s: %s\n", args[0].c_str(), error.c_str());
Expand Down
17 changes: 17 additions & 0 deletions test/embedding/test-embedding.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,3 +151,20 @@ for (const extraSnapshotArgs of [
[ '--', ...runEmbeddedArgs ],
{ cwd: tmpdir.path });
}

// Guarantee NODE_REPL_EXTERNAL_MODULE won't bypass kDisableNodeOptionsEnv
{
spawnSyncAndExit(
binary,
['require("os")'],
{
env: {
'NODE_REPL_EXTERNAL_MODULE': 'fs',
},
},
{
status: 10,
signal: null,
stderr: `${binary}: NODE_REPL_EXTERNAL_MODULE can't be used with kDisableNodeOptionsEnv\n`,
});
}

0 comments on commit fce6acc

Please sign in to comment.