process: delay creation of process.env after bootstrap/node.js

Make sure that no code is allowed to access process.env during
the execution of bootstrap/node.js.

PR-URL: https://github.com/nodejs/node/pull/26515
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Joyee Cheung 2019-03-06 15:25:18 +01:00
parent 1482547441
commit ee2d2638ad
No known key found for this signature in database
GPG Key ID: 92B78A53C8303B8D
2 changed files with 10 additions and 12 deletions

View File

@ -340,6 +340,16 @@ MaybeLocal<Value> RunBootstrapping(Environment* env) {
MaybeLocal<Value> result = ExecuteBootstrapper(
env, "internal/bootstrap/node", &node_params, &node_args);
Local<Object> env_var_proxy;
if (!CreateEnvVarProxy(context, isolate, env->as_callback_data())
.ToLocal(&env_var_proxy) ||
process
->Set(env->context(),
FIXED_ONE_BYTE_STRING(env->isolate(), "env"),
env_var_proxy)
.IsNothing())
return MaybeLocal<Value>();
env->set_has_run_bootstrapping_code(true);
return scope.EscapeMaybe(result);

View File

@ -151,18 +151,6 @@ MaybeLocal<Object> CreateProcessObject(
ToV8Value(env->context(), exec_args)
.ToLocalChecked()).FromJust();
Local<Object> env_var_proxy;
if (!CreateEnvVarProxy(context, isolate, env->as_callback_data())
.ToLocal(&env_var_proxy))
return MaybeLocal<Object>();
// process.env
process
->Set(env->context(),
FIXED_ONE_BYTE_STRING(env->isolate(), "env"),
env_var_proxy)
.FromJust();
READONLY_PROPERTY(process, "pid",
Integer::New(env->isolate(), uv_os_getpid()));