Skip to content

Commit 594d943

Browse files
alexcfyungjuanarbol
authored andcommitted
lib: pass env variables to child process on z/OS
PR-URL: #42255 Reviewed-By: Michael Dawson <[email protected]>
1 parent b665171 commit 594d943

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

lib/child_process.js

+23-3
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ const {
9090

9191
const MAX_BUFFER = 1024 * 1024;
9292

93+
const isZOS = process.platform === 'os390';
94+
9395
/**
9496
* Spawns a new Node.js process + fork.
9597
* @param {string|URL} modulePath
@@ -514,6 +516,14 @@ ObjectDefineProperty(execFile, promisify.custom, {
514516
value: customPromiseExecFunction(execFile)
515517
});
516518

519+
function copyProcessEnvToEnv(env, name, optionEnv) {
520+
if (process.env[name] &&
521+
(!optionEnv ||
522+
!ObjectPrototypeHasOwnProperty(optionEnv, name))) {
523+
env[name] = process.env[name];
524+
}
525+
}
526+
517527
function normalizeSpawnArguments(file, args, options) {
518528
validateString(file, 'file');
519529

@@ -620,9 +630,19 @@ function normalizeSpawnArguments(file, args, options) {
620630

621631
// process.env.NODE_V8_COVERAGE always propagates, making it possible to
622632
// collect coverage for programs that spawn with white-listed environment.
623-
if (process.env.NODE_V8_COVERAGE &&
624-
!ObjectPrototypeHasOwnProperty(options.env || {}, 'NODE_V8_COVERAGE')) {
625-
env.NODE_V8_COVERAGE = process.env.NODE_V8_COVERAGE;
633+
copyProcessEnvToEnv(env, 'NODE_V8_COVERAGE', options.env);
634+
635+
if (isZOS) {
636+
// The following environment variables must always propagate if set.
637+
copyProcessEnvToEnv(env, '_BPXK_AUTOCVT', options.env);
638+
copyProcessEnvToEnv(env, '_CEE_RUNOPTS', options.env);
639+
copyProcessEnvToEnv(env, '_TAG_REDIR_ERR', options.env);
640+
copyProcessEnvToEnv(env, '_TAG_REDIR_IN', options.env);
641+
copyProcessEnvToEnv(env, '_TAG_REDIR_OUT', options.env);
642+
copyProcessEnvToEnv(env, 'STEPLIB', options.env);
643+
copyProcessEnvToEnv(env, 'LIBPATH', options.env);
644+
copyProcessEnvToEnv(env, '_EDC_SIG_DFLT', options.env);
645+
copyProcessEnvToEnv(env, '_EDC_SUSV3', options.env);
626646
}
627647

628648
let envKeys = [];

0 commit comments

Comments
 (0)