From: Alexander Borisov Date: Tue, 2 Jun 2020 14:53:28 +0000 (+0300) Subject: Fixed parsing of invalid binary expressions. X-Git-Url: http://git.kaiwu.me/sitemap.xml?a=commitdiff_plain;h=ea92439fd6df941003fc12ef470c5a774442db81;p=njs.git Fixed parsing of invalid binary expressions. The issue was introduced in 86f55a7dc4a4. --- diff --git a/src/njs_parser.c b/src/njs_parser.c index 7d31857f..2eee0f7f 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -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); } diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 36c9c080..f157dee4 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -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") }, };