goto failed;
case '[':
- while (++p < lexer->end && *p != ']') {
+ while (1) {
+ if (++p >= lexer->end) {
+ goto failed;
+ }
+
+ if (*p == ']') {
+ break;
+ }
+
switch (*p) {
case '\n':
case '\r':
goto failed;
case '\\':
- if (++p < lexer->end && (*p == '\n' || *p == '\r')) {
+ if (++p >= lexer->end || *p == '\n' || *p == '\r') {
goto failed;
}
break;
case '\\':
- if (++p < lexer->end && (*p == '\n' || *p == '\r')) {
+ if (++p >= lexer->end || *p == '\n' || *p == '\r') {
goto failed;
}
{ njs_str("/]/"),
njs_str("/\\]/") },
+ { njs_str("/["),
+ njs_str("SyntaxError: Unterminated RegExp \"/[\" in 1") },
+
+ { njs_str("/[\\"),
+ njs_str("SyntaxError: Unterminated RegExp \"/[\\\" in 1") },
+
{ njs_str("RegExp(']')"),
njs_str("/\\]/") },
+ { njs_str("RegExp('[\\\\')"),
+ njs_str("SyntaxError: pcre_compile(\"[\\\") failed: \\ at end of pattern") },
+
{ njs_str("RegExp('[\\\\\\\\]]')"),
njs_str("/[\\\\]\\]/") },
{ njs_str("new RegExp('[')"),
njs_str("SyntaxError: pcre_compile(\"[\") failed: missing terminating ] for character class") },
+ { njs_str("new RegExp('['.repeat(16))"),
+ njs_str("SyntaxError: pcre_compile(\"[[[[[[[[[[[[[[[[\") failed: missing terminating ] for character class") },
+
{ njs_str("new RegExp('\\\\')"),
njs_str("SyntaxError: pcre_compile(\"\\\") failed: \\ at end of pattern") },