blob: af8a76351eda7d31f4419c3c142a2d4bc1d9c500 [file] [log] [blame]
//@ skip if $memoryLimited
// &&&&
description('Test that we do not overflow the stack while handling regular expressions');
// Base case.
shouldThrow('new RegExp(Array(500000).join("(") + "a" + Array(500000).join(")"))', '"RangeError: Out of memory: Invalid regular expression: too many nested disjunctions"');
{ // Verify that a deep JS stack does not help avoiding the error.
function recursiveCall(depth) {
if (!(depth % 10)) {
debug("Creating RegExp at depth " + depth);
shouldThrow('new RegExp(Array(500000).join("(") + "a" + Array(500000).join(")"))', '"RangeError: Out of memory: Invalid regular expression: too many nested disjunctions"');
}
if (depth < 100) {
recursiveCall(depth + 1);
}
}
recursiveCall(0);
}
{ // Have the deepest nested subpattern surrounded by other expressions.
var expression = "";
for (let i = 0; i < 500000; ++i) {
expression += "((a)(";
}
expression += "b";
for (let i = 0; i < 500000; ++i) {
expression += ")(c))";
}
shouldThrow('new RegExp(expression)', '"SyntaxError: Invalid regular expression: regular expression too large"');
}