Browse Source

test: use JSON.stringify to trigger stack overflow

V8's interpreter performs stack checks both at the call site and at the
function entry. A recursive function could therefore trigger stack
overflow at two different source locations. Instead of recursion, call
JSON.stringify on a deeply nested array.

PR-URL: https://github.com/nodejs/node/pull/12481
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
v6
Yang Guo 8 years ago
committed by Franziska Hinkelmann
parent
commit
b73b903dc4
  1. 10
      test/message/stack_overflow.js
  2. 6
      test/message/stack_overflow.out

10
test/message/stack_overflow.js

@ -26,10 +26,12 @@ Error.stackTraceLimit = 0;
console.error('before');
// stack overflow
function stackOverflow() {
stackOverflow();
// Trigger stack overflow by stringifying a deeply nested array.
let array = [];
for (let i = 0; i < 100000; i++) {
array = [ array ];
}
stackOverflow();
JSON.stringify(array);
console.error('after');

6
test/message/stack_overflow.out

@ -1,6 +1,6 @@
before
*test*message*stack_overflow.js:*
function stackOverflow() {
^
JSON.stringify(array);
^
RangeError: Maximum call stack size exceeded

Loading…
Cancel
Save