From: Alexander Borisov Date: Wed, 3 Jun 2020 17:49:52 +0000 (+0300) Subject: Fixed parsing of invalid unary expression. X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=07c86b2d834358480ce3242cb13a72577236ded8;p=njs.git Fixed parsing of invalid unary expression. The issue was introduced in 86f55a7dc4a4. --- diff --git a/src/njs_parser.c b/src/njs_parser.c index e209895f..20ee3950 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -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; diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 8bcf648f..30487b10 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -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") }, };