From f84a5e19b733b25a70c9ca190ec3e897b5f05612 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 cef53bfb3d35c5..00baf004c951c0 100644 --- a/test/message/stack_overflow.js +++ b/test/message/stack_overflow.js @@ -5,10 +5,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 4f7b8b132fc7f2..c83f8001d99f1f 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