@@ -93,6 +93,8 @@ const { |
93 | 93 |
|
94 | 94 | const MAX_BUFFER = 1024 * 1024; |
95 | 95 |
|
| 96 | +const isZOS = process.platform === 'os390'; |
| 97 | + |
96 | 98 | /** |
97 | 99 | * Spawns a new Node.js process + fork. |
98 | 100 | * @param {string|URL} modulePath |
@@ -524,6 +526,14 @@ ObjectDefineProperty(execFile, promisify.custom, { |
524 | 526 | value: customPromiseExecFunction(execFile) |
525 | 527 | }); |
526 | 528 |
|
| 529 | +function copyProcessEnvToEnv(env, name, optionEnv) { |
| 530 | + if (process.env[name] && |
| 531 | + (!optionEnv || |
| 532 | + !ObjectPrototypeHasOwnProperty(optionEnv, name))) { |
| 533 | + env[name] = process.env[name]; |
| 534 | + } |
| 535 | +} |
| 536 | + |
527 | 537 | function normalizeSpawnArguments(file, args, options) { |
528 | 538 | validateString(file, 'file'); |
529 | 539 |
|
@@ -630,9 +640,19 @@ function normalizeSpawnArguments(file, args, options) { |
630 | 640 |
|
631 | 641 | // process.env.NODE_V8_COVERAGE always propagates, making it possible to |
632 | 642 | // collect coverage for programs that spawn with white-listed environment. |
633 | | - if (process.env.NODE_V8_COVERAGE && |
634 | | - !ObjectPrototypeHasOwnProperty(options.env || {}, 'NODE_V8_COVERAGE')) { |
635 | | - env.NODE_V8_COVERAGE = process.env.NODE_V8_COVERAGE; |
| 643 | + copyProcessEnvToEnv(env, 'NODE_V8_COVERAGE', options.env); |
| 644 | + |
| 645 | + if (isZOS) { |
| 646 | + // The following environment variables must always propagate if set. |
| 647 | + copyProcessEnvToEnv(env, '_BPXK_AUTOCVT', options.env); |
| 648 | + copyProcessEnvToEnv(env, '_CEE_RUNOPTS', options.env); |
| 649 | + copyProcessEnvToEnv(env, '_TAG_REDIR_ERR', options.env); |
| 650 | + copyProcessEnvToEnv(env, '_TAG_REDIR_IN', options.env); |
| 651 | + copyProcessEnvToEnv(env, '_TAG_REDIR_OUT', options.env); |
| 652 | + copyProcessEnvToEnv(env, 'STEPLIB', options.env); |
| 653 | + copyProcessEnvToEnv(env, 'LIBPATH', options.env); |
| 654 | + copyProcessEnvToEnv(env, '_EDC_SIG_DFLT', options.env); |
| 655 | + copyProcessEnvToEnv(env, '_EDC_SUSV3', options.env); |
636 | 656 | } |
637 | 657 |
|
638 | 658 | let envKeys = []; |
|