From 33f3c476be4fc4dc314a83800cb89cd7ce56ef83 Mon Sep 17 00:00:00 2001 From: Alexander Borisov Date: Tue, 29 Jun 2021 17:08:23 +0300 Subject: [PATCH] Fixed rest parameter parsing without binding identifier. This closes #400 issue on GitHub. --- src/njs_parser.c | 9 +++++++++ src/test/njs_unit_test.c | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/src/njs_parser.c b/src/njs_parser.c index 7a89f7e7..2d3f18c2 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -6791,6 +6791,15 @@ njs_parser_formal_parameters(njs_parser_t *parser, njs_lexer_token_t *token, njs_lexer_consume_token(parser->lexer, 1); + token = njs_lexer_token(parser->lexer, 0); + if (token == NULL) { + return NJS_ERROR; + } + + if (!njs_lexer_token_is_binding_identifier(token)) { + return njs_parser_failed(parser); + } + lambda->rest_parameters = 1; return NJS_OK; diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index d9def1f0..c20cf74b 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -9330,6 +9330,12 @@ static njs_unit_test_t njs_test[] = { njs_str("function f(a,...rest) { }; f.length"), njs_str("1") }, + { njs_str("function f(...) {}"), + njs_str("SyntaxError: Unexpected token \")\" in 1") }, + + { njs_str("(function (...) {})()"), + njs_str("SyntaxError: Unexpected token \")\" in 1") }, + { njs_str("function f(a,b) { }; var ff = f.bind(f, 1); ff.length"), njs_str("1") }, -- 2.47.3