Skip to content

Commit d57d099

Browse files
committed
src: forbid access to CLI options before bootstrapping is done
PR-URL: #26476 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]> Reviewed-By: Richard Lau <[email protected]>
1 parent 4e9dc31 commit d57d099

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

lib/internal/async_hooks.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ const {
55
ERR_INVALID_ASYNC_ID
66
} = require('internal/errors').codes;
77

8-
const { getOptionValue } = require('internal/options');
9-
const shouldAbortOnUncaughtException =
10-
getOptionValue('--abort-on-uncaught-exception');
11-
128
const async_wrap = internalBinding('async_wrap');
139
/* async_hook_fields is a Uint32Array wrapping the uint32_t array of
1410
* Environment::AsyncHooks::fields_[]. Each index tracks the number of active
@@ -112,7 +108,9 @@ function fatalError(e) {
112108
Error.captureStackTrace(o, fatalError);
113109
process._rawDebug(o.stack);
114110
}
115-
if (shouldAbortOnUncaughtException) {
111+
112+
const { getOptionValue } = require('internal/options');
113+
if (getOptionValue('--abort-on-uncaught-exception')) {
116114
process.abort();
117115
}
118116
process.exit(1);

src/node_options.cc

+6
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,12 @@ HostPort SplitHostPort(const std::string& arg,
564564
void GetOptions(const FunctionCallbackInfo<Value>& args) {
565565
Mutex::ScopedLock lock(per_process::cli_options_mutex);
566566
Environment* env = Environment::GetCurrent(args);
567+
if (!env->has_run_bootstrapping_code()) {
568+
// No code because this is an assertion.
569+
return env->ThrowError(
570+
"Should not query options before bootstrapping is done");
571+
}
572+
567573
Isolate* isolate = env->isolate();
568574
Local<Context> context = env->context();
569575

0 commit comments

Comments
 (0)