@@ -90,6 +90,8 @@ const {
9090
9191const 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+
517527function 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