| 'use strict'; |
| |
| // This test verifies that when the uncaughtException handler itself causes |
| // a stack overflow, the process exits with a non-zero exit code. |
| // This is important to ensure we don't silently swallow errors. |
| |
| require('../common'); |
| const assert = require('assert'); |
| const { spawnSync } = require('child_process'); |
| |
| if (process.argv[2] === 'child') { |
| function f() { f(); } |
| process.on('uncaughtException', f); |
| throw new Error('X'); |
| } else { |
| // Parent process - spawn the child and check exit code |
| const result = spawnSync( |
| process.execPath, |
| [__filename, 'child'], |
| { encoding: 'utf8', timeout: 30000 } |
| ); |
| |
| // Should exit with non-zero exit code since the uncaughtException handler |
| // itself caused a stack overflow. |
| assert.notStrictEqual(result.status, 0, |
| `Expected non-zero exit code, got ${result.status}.\n` + |
| `stdout: ${result.stdout}\n` + |
| `stderr: ${result.stderr}`); |
| } |