From b73b903dc40bf97f1094e99ed3a95927b2185e5a Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Wed, 8 Mar 2017 12:42:31 +0100 Subject: [PATCH] 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 Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Franziska Hinkelmann Reviewed-By: Colin Ihrig Reviewed-By: Benjamin Gruenbaum Reviewed-By: James M Snell --- test/message/stack_overflow.js | 10 ++++++---- test/message/stack_overflow.out | 6 +++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/test/message/stack_overflow.js b/test/message/stack_overflow.js index 46e101b916..9541ee7840 100644 --- a/test/message/stack_overflow.js +++ b/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'); diff --git a/test/message/stack_overflow.out b/test/message/stack_overflow.out index 4f7b8b132f..c83f8001d9 100644 --- a/test/message/stack_overflow.out +++ b/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