mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 10:15:07 +08:00
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:
1 parent
c753f27a3d
commit
71691e53d6
2 files changed
+32
No files matched your search
@@ -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,
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
@@ -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/);
|
||||
Reference in new issue
Block a user