| description( |
| 'Tests some regular expressions that used to overflow the regular expression compilation preflight computation.' |
| ); |
| |
| shouldBe('/(\\d)(\\1{1})/.exec("11").toString()', '"11,1,1"'); |
| |
| shouldBe('/^(\\d{1,2})([ -:\\/\\.]{1})(\\d{1,2})(\\2{1})?(\\d{2,4})?$/.exec("1:1").toString()', '"1:1,1,:,1,,"'); |
| |
| shouldBe('/^(\\d{4})([ -:\\/\\.]{1})(\\d{1,2})(\\2{1})(\\d{1,2})T(\\d{1,2})([ -:\\/\\.]{1})(\\d{1,2})(\\7{1})(\\d{1,2})Z$/.exec("1234:5:6T7/8/9Z").toString()', |
| '"1234:5:6T7/8/9Z,1234,:,5,:,6,7,/,8,/,9"'); |
| |
| shouldBe('/\\[["\'\\s]{0,1}([\\w-]*)["\'\\s]{0,1}([\\W]{0,1}=){0,2}["\'\\s]{0,1}([\\w-]*)["\'\\s]{0,1}\\]$/.exec("[]").toString()', |
| '"[],,,"'); |
| |
| shouldBe('/(x){0,2}/.exec("").toString()', '","'); |
| |
| shouldBe('/[\u00A1]{4,6}/.exec("\u00A1\u00A1\u00A1\u00A1").toString()', '"\u00A1\u00A1\u00A1\u00A1"'); |
| shouldBe('/[\u00A1]{1,100}[\u00A1]{1,100}[\u00A1]{1,100}[\u00A1]{1,100}[\u00A1]{1,100}[\u00A1]{1,100}[\u00A1]{1,100}[\u00A1]{1,100}/.exec("\u00A1\u00A1\u00A1\u00A1\u00A1\u00A1\u00A1\u00A1").toString()', '"\u00A1\u00A1\u00A1\u00A1\u00A1\u00A1\u00A1\u00A1"'); |
| |
| shouldBe('/{([\\D\\-\\ca]]„£µ+?)}|[[\\B-\\u00d4]√π- ]]]{0,3}/i.exec("B√π- ]]").toString()', '"B√π- ]],"'); |
| shouldBe('/|[x\\B-\\u00b5]/i.exec("").toString()', '""'); |
| |
| var complexPattern = ""; |
| for (var i = 0; i < 18; ++i) |
| complexPattern += "a?"; |
| for (var i = 0; i < 18; ++i) |
| complexPattern += "a"; |
| complexPattern = "(" + complexPattern + ")"; |
| |
| var complexInput = ""; |
| for (var i = 0; i < 18; ++i) |
| complexInput += "a"; |
| |
| shouldBe('new RegExp(complexPattern).exec(complexInput)[0]', 'complexInput'); // Big but OK |
| // The analogous "too big" case is tested separately in |
| // regexp-overflow-too-big.html so engines that don't limit regexp execution |
| // time don't time out in this test. See |
| // https://bugs.webkit.org/show_bug.cgi?id=18327 . |
| |
| var s = "a"; |
| for (var i = 0; i < 21; i++) |
| s += s; |
| |
| shouldThrow('new RegExp(s);'); |
| |
| debug(''); |