| //@ skip if $memoryLimited |
| description('Test that we do not overflow the stack while handling regular expressions'); |
| 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) { |
| 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"'); |
| recursiveCall(depth + 1); |
| { // Have the deepest nested subpattern surrounded by other expressions. |
| for (let i = 0; i < 500000; ++i) { |
| for (let i = 0; i < 500000; ++i) { |
| shouldThrow('new RegExp(expression)', '"SyntaxError: Invalid regular expression: regular expression too large"'); |