build,test: increase stack size limit on Windows

Fixes: https://github.com/nodejs/node/issues/43630

PR-URL: https://github.com/nodejs/node/pull/43632
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
This commit is contained in:
Tobias Nießen authored and GitHub committed 2022-07-02 17:38:11 +01:00
1 parent c753f27a3d
commit 71691e53d6
2 files changed
+32

No files matched your search

+6
View File
@@ -172,6 +172,12 @@
'RandomizedBaseAddress': 2, # enable ASLR
'DataExecutionPrevention': 2, # enable DEP
'AllowIsolation': 'true',
# By default, the MSVC linker only reserves 1 MiB of stack memory for
# each thread, whereas other platforms typically allow much larger
# stack memory sections. We raise the limit to make it more consistent
# across platforms and to support the few use cases that require large
# amounts of stack memory, without having to modify the node binary.
'StackReserveSize': 0x800000,
},
},
+26
View File
@@ -0,0 +1,26 @@
'use strict';
require('../common');
const assert = require('assert');
const { spawnSync } = require('child_process');
// The default --stack-size is 984, which is below Windows' default stack size
// limit of 1 MiB. However, even a slight increase would cause node to exceed
// the 1 MiB limit and thus to crash with the exit code STATUS_STACK_OVERFLOW.
// Newer versions of Node.js allow the stack size to grow to up to 8 MiB, which
// better aligns with default limits on other platforms and which is commonly
// used for browsers on Windows.
// See https://github.com/nodejs/node/issues/43630.
const { status, signal, stderr } = spawnSync(process.execPath, [
'--stack-size=2000',
'-e',
'(function explode() { return explode(); })()',
], {
encoding: 'utf8'
});
assert.strictEqual(status, 1);
assert.strictEqual(signal, null);
assert.match(stderr, /Maximum call stack size exceeded/);