From 2255a0ff11def78ab72c97915dadb43367ef1c3a Mon Sep 17 00:00:00 2001 From: Alexey Shvayka Date: Wed, 4 Mar 2020 14:25:11 +0200 Subject: [PATCH] Add replacer stack overflow test --- .../replacer-function-stack-overflow.js | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/built-ins/JSON/stringify/replacer-function-stack-overflow.js diff --git a/test/built-ins/JSON/stringify/replacer-function-stack-overflow.js b/test/built-ins/JSON/stringify/replacer-function-stack-overflow.js new file mode 100644 index 0000000000..0160fedd8f --- /dev/null +++ b/test/built-ins/JSON/stringify/replacer-function-stack-overflow.js @@ -0,0 +1,35 @@ +// Copyright (C) 2020 Alexey Shvayka. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-json.stringify +description: > + Stack overflow due to infinite recursion in replacer throws an expected error. +---*/ + +var getStackOverflowError = function() { + try { + return getStackOverflowError(); + } catch (err) { + return err; + } +}; + +var StackOverflowError = getStackOverflowError().constructor; + +var obj = {}; +var objReplacer = function() { + return {key: obj}; +}; + +assert.throws(StackOverflowError, function() { + JSON.stringify(null, objReplacer); +}); + +var arr = []; +var arrReplacer = function() { + return [arr]; +}; + +assert.throws(StackOverflowError, function() { + JSON.stringify(null, arrReplacer); +});