From: Alexander Borisov Date: Tue, 2 Jun 2020 14:53:29 +0000 (+0300) Subject: Added necessary checks for obligatory grammar symbols. X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=8d50594ce22e51eaefc31598ec486b516a77ac2c;p=njs.git Added necessary checks for obligatory grammar symbols. The issue was introduced in 86f55a7dc4a4. --- diff --git a/src/njs_parser.c b/src/njs_parser.c index 2eee0f7f..7ffede6a 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -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; diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index f157dee4..757ae23f 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -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") }, };