]> git.kaiwu.me - njs.git/commitdiff
Fixed parsing of invalid binary expressions.
authorAlexander Borisov <alexander.borisov@nginx.com>
Tue, 2 Jun 2020 14:53:28 +0000 (17:53 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Tue, 2 Jun 2020 14:53:28 +0000 (17:53 +0300)
The issue was introduced in 86f55a7dc4a4.

src/njs_parser.c
src/test/njs_unit_test.c

index 7d31857f98dc2fe462545be6cc0fb5bf85339b68..2eee0f7f03ff418b316ceacfe1fd375b2be6c186 100644 (file)
@@ -3086,6 +3086,10 @@ njs_parser_expression_node(njs_parser_t *parser, njs_lexer_token_t *token,
 {
     njs_parser_node_t  *node;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     if (parser->target != NULL) {
         parser->target->right = parser->node;
         parser->target->right->dest = parser->target;
@@ -3107,7 +3111,7 @@ njs_parser_expression_node(njs_parser_t *parser, njs_lexer_token_t *token,
     node->left = parser->node;
     node->left->dest = node;
 
-    return njs_parser_after(parser, current, node, 1, after);
+    return njs_parser_after(parser, current, node, 0, after);
 }
 
 
@@ -3398,6 +3402,10 @@ njs_parser_exponentiation_expression_match(njs_parser_t *parser,
 {
     njs_parser_node_t  *node;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     if (parser->target != NULL) {
         parser->target->right = parser->node;
         parser->target->right->dest = parser->target;
@@ -3423,7 +3431,7 @@ njs_parser_exponentiation_expression_match(njs_parser_t *parser,
 
     njs_parser_next(parser, njs_parser_exponentiation_expression);
 
-    return njs_parser_after(parser, current, node, 1,
+    return njs_parser_after(parser, current, node, 0,
                             njs_parser_exponentiation_expression_match);
 }
 
@@ -3449,6 +3457,10 @@ njs_parser_multiplicative_expression_match(njs_parser_t *parser,
     njs_parser_node_t       *node;
     njs_vmcode_operation_t  operation;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     if (parser->target != NULL) {
         parser->target->right = parser->node;
         parser->target->right->dest = parser->target;
@@ -3485,7 +3497,7 @@ njs_parser_multiplicative_expression_match(njs_parser_t *parser,
 
     njs_parser_next(parser, njs_parser_exponentiation_expression);
 
-    return njs_parser_after(parser, current, node, 1,
+    return njs_parser_after(parser, current, node, 0,
                             njs_parser_multiplicative_expression_match);
 }
 
@@ -3511,6 +3523,10 @@ njs_parser_additive_expression_match(njs_parser_t *parser,
     njs_parser_node_t       *node;
     njs_vmcode_operation_t  operation;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     if (parser->target != NULL) {
         parser->target->right = parser->node;
         parser->target->right->dest = parser->target;
@@ -3543,7 +3559,7 @@ njs_parser_additive_expression_match(njs_parser_t *parser,
 
     njs_parser_next(parser, njs_parser_multiplicative_expression);
 
-    return njs_parser_after(parser, current, node, 1,
+    return njs_parser_after(parser, current, node, 0,
                             njs_parser_additive_expression_match);
 }
 
@@ -3569,6 +3585,10 @@ njs_parser_shift_expression_match(njs_parser_t *parser,
     njs_parser_node_t       *node;
     njs_vmcode_operation_t  operation;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     if (parser->target != NULL) {
         parser->target->right = parser->node;
         parser->target->right->dest = parser->target;
@@ -3605,7 +3625,7 @@ njs_parser_shift_expression_match(njs_parser_t *parser,
 
     njs_parser_next(parser, njs_parser_additive_expression);
 
-    return njs_parser_after(parser, current, node, 1,
+    return njs_parser_after(parser, current, node, 0,
                             njs_parser_shift_expression_match);
 }
 
@@ -3631,6 +3651,10 @@ njs_parser_relational_expression_match(njs_parser_t *parser,
     njs_parser_node_t       *node;
     njs_vmcode_operation_t  operation;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     if (parser->target != NULL) {
         parser->target->right = parser->node;
         parser->target->right->dest = parser->target;
@@ -3679,7 +3703,7 @@ njs_parser_relational_expression_match(njs_parser_t *parser,
 
     njs_parser_next(parser, njs_parser_shift_expression);
 
-    return njs_parser_after(parser, current, node, 1,
+    return njs_parser_after(parser, current, node, 0,
                             njs_parser_relational_expression_match);
 }
 
@@ -3705,6 +3729,10 @@ njs_parser_equality_expression_match(njs_parser_t *parser,
     njs_parser_node_t       *node;
     njs_vmcode_operation_t  operation;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     if (parser->target != NULL) {
         parser->target->right = parser->node;
         parser->target->right->dest = parser->target;
@@ -3745,7 +3773,7 @@ njs_parser_equality_expression_match(njs_parser_t *parser,
 
     njs_parser_next(parser, njs_parser_relational_expression);
 
-    return njs_parser_after(parser, current, node, 1,
+    return njs_parser_after(parser, current, node, 0,
                             njs_parser_equality_expression_match);
 }
 
@@ -3883,6 +3911,10 @@ njs_parser_coalesce_expression(njs_parser_t *parser, njs_lexer_token_t *token,
     njs_token_type_t   type;
     njs_parser_node_t  *node;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     node = parser->node;
 
     if (parser->target != NULL) {
@@ -3916,7 +3948,7 @@ njs_parser_coalesce_expression(njs_parser_t *parser, njs_lexer_token_t *token,
 
     njs_parser_next(parser, njs_parser_bitwise_OR_expression);
 
-    return njs_parser_after(parser, current, node, 1,
+    return njs_parser_after(parser, current, node, 0,
                             njs_parser_coalesce_expression);
 }
 
index 36c9c080b90ae506472f398bd92fc53d70b85c14..f157dee4a32ea317bd4bc7456399271dfb23b048 100644 (file)
@@ -16660,6 +16660,9 @@ static njs_unit_test_t  njs_test[] =
 
     { njs_str("new/la"),
       njs_str("SyntaxError: Unterminated RegExp \"/la\" in 1") },
+
+    { njs_str("{name; {/ / /}"),
+      njs_str("SyntaxError: Unexpected token \"}\" in 1") },
 };