Welcome! Log In Create A New Profile

Advanced

[njs] Parser: fixed broken object literals parsing.

Alexander Borisov
June 25, 2020 06:12AM
details: https://hg.nginx.org/njs/rev/d692284e0b9f
branches:
changeset: 1439:d692284e0b9f
user: Alexander Borisov <alexander.borisov@nginx.com>
date: Thu Jun 25 13:10:03 2020 +0300
description:
Parser: fixed broken object literals parsing.

diffstat:

src/njs_parser.c | 9 ++++++---
src/test/njs_unit_test.c | 20 +++++++++++++++++++-
2 files changed, 25 insertions(+), 4 deletions(-)

diffs (77 lines):

diff -r 7d24976ced90 -r d692284e0b9f src/njs_parser.c
--- a/src/njs_parser.c Fri Jun 19 19:48:13 2020 +0300
+++ b/src/njs_parser.c Thu Jun 25 13:10:03 2020 +0300
@@ -1694,7 +1694,7 @@ njs_parser_object_literal(njs_parser_t *

njs_parser_next(parser, njs_parser_property_definition_list);

- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_object_literal_after);
}

@@ -1733,7 +1733,7 @@ njs_parser_property_definition_list(njs_
{
njs_parser_next(parser, njs_parser_property_definition);

- return njs_parser_after(parser, current, parser->target, 0,
+ return njs_parser_after(parser, current, parser->target, 1,
njs_parser_property_definition_list_after);
}

@@ -1750,7 +1750,7 @@ njs_parser_property_definition_list_afte

njs_parser_next(parser, njs_parser_property_definition);

- return njs_parser_after(parser, current, parser->target, 0,
+ return njs_parser_after(parser, current, parser->target, 1,
njs_parser_property_definition_list_after);
}

@@ -1866,6 +1866,9 @@ njs_parser_property_definition(njs_parse
temp = parser->target;

switch (token->type) {
+ case NJS_TOKEN_CLOSE_BRACE:
+ return njs_parser_stack_pop(parser);
+
/* PropertyName */
case NJS_TOKEN_STRING:
case NJS_TOKEN_ESCAPE_STRING:
diff -r 7d24976ced90 -r d692284e0b9f src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c Fri Jun 19 19:48:13 2020 +0300
+++ b/src/test/njs_unit_test.c Thu Jun 25 13:10:03 2020 +0300
@@ -11713,7 +11713,7 @@ static njs_unit_test_t njs_test[] =
njs_str("RangeError: Maximum call stack size exceeded") },

{ njs_str("new Function(\"{[\".repeat(2**13));"),
- njs_str("SyntaxError: Unexpected token \")\" in runtime:1") },
+ njs_str("SyntaxError: Unexpected token \"}\" in runtime:1") },

{ njs_str("new Function(\"{;\".repeat(2**13));"),
njs_str("SyntaxError: Unexpected token \")\" in runtime:1") },
@@ -17022,6 +17022,24 @@ static njs_unit_test_t njs_test[] =

{ njs_str("object?."),
njs_str("SyntaxError: Unexpected end of input in 1") },
+
+ { njs_str("`${{a: 1, b}}`"),
+ njs_str("ReferenceError: \"b\" is not defined in 1") },
+
+ { njs_str("`${{a: 1, b:}}`"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("`${{a: 1, b:,}}`"),
+ njs_str("SyntaxError: Unexpected token \",\" in 1") },
+
+ { njs_str("`${{a: 1, b: 2,}}`"),
+ njs_str("[object Object]") },
+
+ { njs_str("`${{a: 1,, b: 2}}`"),
+ njs_str("SyntaxError: Unexpected token \",\" in 1") },
+
+ { njs_str("`${{f(){-} - {}}`"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
};


_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Parser: fixed broken object literals parsing.

Alexander Borisov 48 June 25, 2020 06:12AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 57
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready