]> git.kaiwu.me - njs.git/commitdiff
Fixed parsing of invalid unary expression.
authorAlexander Borisov <alexander.borisov@nginx.com>
Wed, 3 Jun 2020 17:49:52 +0000 (20:49 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Wed, 3 Jun 2020 17:49:52 +0000 (20:49 +0300)
The issue was introduced in 86f55a7dc4a4.

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

index e209895f26564515493619307dc006a1a9f23c6c..20ee39504cb759cf20280c06f077ecc7ba771422 100644 (file)
@@ -3304,7 +3304,7 @@ njs_parser_unary_expression(njs_parser_t *parser, njs_lexer_token_t *token,
 
     parser->target = node;
 
-    return njs_parser_after(parser, current, node, 1,
+    return njs_parser_after(parser, current, node, 0,
                             njs_parser_unary_expression_next);
 }
 
@@ -3332,6 +3332,10 @@ njs_parser_unary_expression_next(njs_parser_t *parser,
     njs_token_type_t   type;
     njs_parser_node_t  *node;
 
+    if (parser->ret != NJS_OK) {
+        return njs_parser_failed(parser);
+    }
+
     type = parser->target->token_type;
     node = parser->node;
 
index 8bcf648f5ba2ba3b17bd390dc0599570d9248e05..30487b10f9f8fba3bf9649f46542daadcec6c01a 100644 (file)
@@ -16696,6 +16696,30 @@ static njs_unit_test_t  njs_test[] =
 
     { njs_str("switch ([(]) {}"),
       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("{{}{delete}"),
+      njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+    { njs_str("{{}{++}"),
+      njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+    { njs_str("{{}{++1}"),
+      njs_str("ReferenceError: Invalid left-hand side in prefix operation in 1") },
+
+    { njs_str("{{}{1++}"),
+      njs_str("ReferenceError: Invalid left-hand side in postfix operation in 1") },
+
+    { njs_str("{{}{1/}"),
+      njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+    { njs_str("{{}{1>>}"),
+      njs_str("SyntaxError: Unexpected token \"}\" in 1") },
 };