]> git.kaiwu.me - njs.git/commitdiff
Fixed parsing of invalid for statement.
authorVadim Zhestikov <v.zhestikov@f5.com>
Sat, 1 Jul 2023 02:49:45 +0000 (19:49 -0700)
committerVadim Zhestikov <v.zhestikov@f5.com>
Sat, 1 Jul 2023 02:49:45 +0000 (19:49 -0700)
src/njs_parser.c
src/test/njs_unit_test.c

index 35c5bbeab63aa0ae4f99b168d2fdb84d14b34124..0d689adb4574d53b1bcf68b0943459583d5c3913 100644 (file)
@@ -5490,6 +5490,18 @@ njs_parser_iteration_statement_for(njs_parser_t *parser,
 }
 
 
+static njs_int_t
+njs_parser_for_var_in_of_expression_chk_fail(njs_parser_t *parser,
+    njs_lexer_token_t *token, njs_queue_link_t *current)
+{
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
+    return njs_parser_for_var_in_of_expression(parser, token, current);
+}
+
+
 static njs_int_t
 njs_parser_for_expression_map_reparse(njs_parser_t *parser,
     njs_lexer_token_t *token, njs_queue_link_t *current)
@@ -5517,8 +5529,8 @@ njs_parser_for_expression_map_reparse(njs_parser_t *parser,
 
         *text = token->text;
 
-        return njs_parser_after(parser, current, text, 1,
-                                njs_parser_for_var_in_of_expression);
+        return njs_parser_after(parser, current, text, 0,
+                                njs_parser_for_var_in_of_expression_chk_fail);
     }
 
     return njs_parser_stack_pop(parser);
index 11c45ba2f4c213cf3ba91f2959829070dbf7092c..562e7322efc5331b4a1dbdd3d1e6456a438cd54a 100644 (file)
@@ -2975,6 +2975,9 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("for(var``>0; 0 ;) ;"),
       njs_str("SyntaxError: Unexpected token \"`\" in 1") },
 
+    { njs_str("for(i;;)for(-new+3;;)break;"),
+      njs_str("SyntaxError: Unexpected token \"+\" in 1") },
+
     /* switch. */
 
     { njs_str("switch"),