From 1000289796ea4f19cd7d5dec7b312f5829d58f86 Mon Sep 17 00:00:00 2001 From: Vadim Zhestikov Date: Mon, 24 Oct 2022 07:48:28 -0700 Subject: [PATCH] Fixed labeled empty statement. This fixes #593 issue on Github. --- src/njs_parser.c | 46 +++++++++++++++++++++------------------- src/test/njs_unit_test.c | 3 +++ 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/njs_parser.c b/src/njs_parser.c index 05cfaf17..2b94d3d4 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -4701,39 +4701,41 @@ njs_parser_statement_after(njs_parser_t *parser, njs_lexer_token_t *token, new_node = parser->node; - if (new_node->hoist) { - child = &njs_parser_chain_top(parser); + if (new_node != NULL) { + if (new_node->hoist) { + child = &njs_parser_chain_top(parser); - while (*child != NULL) { - node = *child; + while (*child != NULL) { + node = *child; - if (node->hoist) { - break; + if (node->hoist) { + break; + } + + child = &node->left; } - child = &node->left; + last = *child; } - last = *child; - } - - stmt = njs_parser_node_new(parser, NJS_TOKEN_STATEMENT); - if (njs_slow_path(stmt == NULL)) { - return NJS_ERROR; - } + stmt = njs_parser_node_new(parser, NJS_TOKEN_STATEMENT); + if (njs_slow_path(stmt == NULL)) { + return NJS_ERROR; + } - stmt->hoist = new_node->hoist; - stmt->left = last; - stmt->right = new_node; + stmt->hoist = new_node->hoist; + stmt->left = last; + stmt->right = new_node; - *child = stmt; + *child = stmt; - top = (child != &parser->target) ? njs_parser_chain_top(parser) - : stmt; + top = (child != &parser->target) ? njs_parser_chain_top(parser) + : stmt; - parser->node = top; + parser->node = top; - njs_parser_chain_top_set(parser, top); + njs_parser_chain_top_set(parser, top); + } return njs_parser_stack_pop(parser); } diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index b8818b44..35614708 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -3159,6 +3159,9 @@ static njs_unit_test_t njs_test[] = { njs_str("a:\n\n1"), njs_str("1") }, + { njs_str("a:;"), + njs_str("undefined") }, + { njs_str("a:\n\n"), njs_str("SyntaxError: Unexpected end of input in 3") }, -- 2.47.3