Skip to content

Commit

Permalink
src: fix external module env and kDisableNodeOptionsEnv
Browse files Browse the repository at this point in the history
PR-URL: nodejs#52905
Fixes: nodejs#51227
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
  • Loading branch information
RafaelGSS authored and bmeck committed Jun 22, 2024
1 parent c79c600 commit ea6d0ec
Show file tree
Hide file tree
Showing 4 changed files with 43 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 @@ -2870,6 +2870,13 @@ equivalent to using the `--redirect-warnings=file` command-line flag.
added:
- v13.0.0
- v12.16.0
changes:
- version:
- REPLACEME
pr-url: https://github.com/nodejs/node/pull/52905
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 @@ -872,6 +872,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::kInvalidCommandLineArgument;
}
}
#endif

Expand Down
11 changes: 9 additions & 2 deletions test/embedding/embedtest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,15 @@ NODE_MAIN(int argc, node::argv_type raw_argv[]) {
std::shared_ptr<node::InitializationResult> result =
node::InitializeOncePerProcess(
args,
{node::ProcessInitializationFlags::kNoInitializeV8,
node::ProcessInitializationFlags::kNoInitializeNodeV8Platform});
{
node::ProcessInitializationFlags::kNoInitializeV8,
node::ProcessInitializationFlags::kNoInitializeNodeV8Platform,
// This is used to test NODE_REPL_EXTERNAL_MODULE is disabled with
// kDisableNodeOptionsEnv. If other tests need NODE_OPTIONS
// support in the future, split this configuration out as a
// command line option.
node::ProcessInitializationFlags::kDisableNodeOptionsEnv,
});

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

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

0 comments on commit ea6d0ec

Please sign in to comment.