]> git.kaiwu.me - njs.git/commitdiff
Added necessary checks for obligatory grammar symbols.
authorAlexander Borisov <alexander.borisov@nginx.com>
Tue, 2 Jun 2020 14:53:29 +0000 (17:53 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Tue, 2 Jun 2020 14:53:29 +0000 (17:53 +0300)
The issue was introduced in 86f55a7dc4a4.

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

index 2eee0f7f03ff418b316ceacfe1fd375b2be6c186..7ffede6a27f7db136585fb0436154312495873c0 100644 (file)
@@ -888,6 +888,10 @@ static njs_int_t
 njs_parser_close_parenthesis(njs_parser_t *parser, njs_lexer_token_t *token,
     njs_queue_link_t *current)
 {
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     if (token->type != NJS_TOKEN_CLOSE_PARENTHESIS) {
         return njs_parser_failed(parser);
     }
@@ -1590,6 +1594,10 @@ njs_parser_array_after(njs_parser_t *parser, njs_lexer_token_t *token,
 {
     njs_int_t  ret;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     ret = njs_parser_array_item(parser, parser->target, parser->node);
     if (ret != NJS_OK) {
         return NJS_ERROR;
@@ -1617,7 +1625,7 @@ static njs_int_t
 njs_parser_array_spread_element(njs_parser_t *parser, njs_lexer_token_t *token,
     njs_queue_link_t *current)
 {
-    if (token->type != NJS_TOKEN_CLOSE_BRACKET) {
+    if (parser->ret != NJS_OK || token->type != NJS_TOKEN_CLOSE_BRACKET) {
         return njs_parser_failed(parser);
     }
 
@@ -6262,6 +6270,10 @@ njs_parser_catch_finally(njs_parser_t *parser, njs_lexer_token_t *token,
 {
     njs_parser_node_t  *node;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     node = njs_parser_node_new(parser, NJS_TOKEN_FINALLY);
     if (node == NULL) {
         return NJS_ERROR;
index f157dee4a32ea317bd4bc7456399271dfb23b048..757ae23fdcb876de27515b90f7546525bd79563f 100644 (file)
@@ -16663,6 +16663,18 @@ static njs_unit_test_t  njs_test[] =
 
     { njs_str("{name; {/ / /}"),
       njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+    { njs_str("[(]"),
+      njs_str("SyntaxError: Unexpected token \"]\" in 1") },
+
+    { njs_str("[...]"),
+      njs_str("SyntaxError: Unexpected token \"]\" in 1") },
+
+    { njs_str("switch () {}"),
+      njs_str("SyntaxError: Unexpected token \")\" in 1") },
+
+    { njs_str("switch ([(]) {}"),
+      njs_str("SyntaxError: Unexpected token \"]\" in 1") },
 };