From 83972ff6ac0d05f3187cb3d4bec3d20325d4afbf Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Tue, 19 Mar 2019 06:11:44 +0800 Subject: [PATCH] process: handle --expose-internals during pre-execution Instead of relying on the value of the CLI option when executing bootstrap/loaders.js. PR-URL: https://github.com/nodejs/node/pull/26759 Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater --- lib/internal/bootstrap/loaders.js | 23 +++++++++++++---------- lib/internal/bootstrap/pre_execution.js | 3 +++ src/node.cc | 3 --- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lib/internal/bootstrap/loaders.js b/lib/internal/bootstrap/loaders.js index d4f70f22707..d8dcd653920 100644 --- a/lib/internal/bootstrap/loaders.js +++ b/lib/internal/bootstrap/loaders.js @@ -41,8 +41,7 @@ // This file is compiled as if it's wrapped in a function with arguments // passed by node::RunBootstrapping() -/* global process, getLinkedBinding, getInternalBinding */ -/* global exposeInternals, primordials */ +/* global process, getLinkedBinding, getInternalBinding, primordials */ const { Reflect, @@ -157,16 +156,20 @@ function NativeModule(id) { this.exportKeys = undefined; this.loaded = false; this.loading = false; - if (id === loaderId) { - // Do not expose this to user land even with --expose-internals. - this.canBeRequiredByUsers = false; - } else if (id.startsWith('internal/')) { - this.canBeRequiredByUsers = exposeInternals; - } else { - this.canBeRequiredByUsers = true; - } + this.canBeRequiredByUsers = !id.startsWith('internal/'); } +// To be called during pre-execution when --expose-internals is on. +// Enables the user-land module loader to access internal modules. +NativeModule.exposeInternals = function() { + for (const [id, mod] of NativeModule.map) { + // Do not expose this to user land even with --expose-internals. + if (id !== loaderId) { + mod.canBeRequiredByUsers = true; + } + } +}; + const { moduleIds, compileFunction diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js index 233ab4f879c..820d931575b 100644 --- a/lib/internal/bootstrap/pre_execution.js +++ b/lib/internal/bootstrap/pre_execution.js @@ -133,6 +133,9 @@ function initializeReport() { function setupDebugEnv() { require('internal/util/debuglog').initializeDebugEnv(process.env.NODE_DEBUG); + if (getOptionValue('--expose-internals')) { + require('internal/bootstrap/loaders').NativeModule.exposeInternals(); + } } function setupSignalHandlers() { diff --git a/src/node.cc b/src/node.cc index 2d23ce6755c..a635fe85a92 100644 --- a/src/node.cc +++ b/src/node.cc @@ -296,8 +296,6 @@ MaybeLocal RunBootstrapping(Environment* env) { env->process_string(), FIXED_ONE_BYTE_STRING(isolate, "getLinkedBinding"), FIXED_ONE_BYTE_STRING(isolate, "getInternalBinding"), - // --expose-internals - FIXED_ONE_BYTE_STRING(isolate, "exposeInternals"), env->primordials_string()}; std::vector> loaders_args = { process, @@ -307,7 +305,6 @@ MaybeLocal RunBootstrapping(Environment* env) { env->NewFunctionTemplate(binding::GetInternalBinding) ->GetFunction(context) .ToLocalChecked(), - Boolean::New(isolate, env->options()->expose_internals), env->primordials()}; // Bootstrap internal loaders