V8 9.1 changed the way it aborts on uncaught exceptions on Windows.
It now uses the code 0x80000003 (exception breakpoint) instead of
0xC0000005 (access violation).
Refs: 26d85acee2
PR-URL: https://github.com/nodejs/node/pull/38273
Backport-PR-URL: https://github.com/nodejs/node/pull/38991
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
Reviewed-By: Mary Marchini <oss@mmarchini.me>
28 lines
1,023 B
JavaScript
28 lines
1,023 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
|
|
// This test ensures that an out of memory error exits with code 134 on Windows
|
|
|
|
if (!common.isWindows) return common.skip('Windows-only');
|
|
|
|
const assert = require('assert');
|
|
const { exec } = require('child_process');
|
|
|
|
if (process.argv[2] === 'heapBomb') {
|
|
// Heap bomb, imitates a memory leak quickly
|
|
const fn = (nM) => [...Array(nM)].map((i) => fn(nM * 2));
|
|
fn(2);
|
|
}
|
|
|
|
// Run child in tmpdir to avoid report files in repo
|
|
const tmpdir = require('../common/tmpdir');
|
|
tmpdir.refresh();
|
|
|
|
// --max-old-space-size=3 is the min 'old space' in V8, explodes fast
|
|
const cmd = `"${process.execPath}" --max-old-space-size=3 "${__filename}"`;
|
|
exec(`${cmd} heapBomb`, { cwd: tmpdir.path }, common.mustCall((err) => {
|
|
const msg = `Wrong exit code of ${err.code}! Expected 134 for abort`;
|
|
// Note: common.nodeProcessAborted() is not asserted here because it
|
|
// returns true on 134 as well as 0x80000003 (V8's base::OS::Abort)
|
|
assert.strictEqual(err.code, 134, msg);
|
|
}));
|