]> git.kaiwu.me - njs.git/commitdiff
Fixed rest parameter parsing without binding identifier.
authorAlexander Borisov <alexander.borisov@nginx.com>
Tue, 29 Jun 2021 14:08:23 +0000 (17:08 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Tue, 29 Jun 2021 14:08:23 +0000 (17:08 +0300)
This closes #400 issue on GitHub.

src/njs_parser.c
src/test/njs_unit_test.c

index 7a89f7e75bf103f42fd635326a9a22edc7dd3e58..2d3f18c2f2d17fa5d6ae57d58c91e47a0ded72cb 100644 (file)
@@ -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;
index d9def1f06c9387c7cdb1a3e2dc9a9884d0f64cbf..c20cf74b81659dc2b2a6019b55b6c53e4ba60b81 100644 (file)
@@ -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") },