trap invalid use of reserved words (#2338)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sat, 30 Sep 2017 18:10:41 +0000 (02:10 +0800)
committerGitHub <noreply@github.com>
Sat, 30 Sep 2017 18:10:41 +0000 (02:10 +0800)
fixes #2337

lib/parse.js
test/mocha/minify.js

index e2dd04b..099fc49 100644 (file)
@@ -1054,6 +1054,8 @@ function parse($TEXT, options) {
         var name = is("name") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null;
         if (in_statement && !name)
             unexpected();
+        if (name && ctor !== AST_Accessor && !(name instanceof AST_SymbolDeclaration))
+            unexpected(prev());
         expect("(");
         var argnames = [];
         for (var first = true; !is("punc", ")");) {
index fc7332f..aed8f91 100644 (file)
@@ -73,6 +73,12 @@ describe("minify", function() {
         assert.strictEqual(run_code(compressed), run_code(original));
     });
 
+    it("should not parse invalid use of reserved words", function() {
+        assert.strictEqual(Uglify.minify("function enum(){}").error, undefined);
+        assert.strictEqual(Uglify.minify("function static(){}").error, undefined);
+        assert.strictEqual(Uglify.minify("function this(){}").error.message, "Unexpected token: name (this)");
+    });
+
     describe("keep_quoted_props", function() {
         it("Should preserve quotes in object literals", function() {
             var js = 'var foo = {"x": 1, y: 2, \'z\': 3};';