From 2dcc552ce0404db3cdabb1dd02c8fff5c8dfc4f9 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sun, 1 Oct 2017 02:10:41 +0800 Subject: [PATCH] trap invalid use of reserved words (#2338) fixes #2337 --- lib/parse.js | 2 ++ test/mocha/minify.js | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/lib/parse.js b/lib/parse.js index e2dd04b6..099fc49a 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -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", ")");) { diff --git a/test/mocha/minify.js b/test/mocha/minify.js index fc7332fb..aed8f915 100644 --- a/test/mocha/minify.js +++ b/test/mocha/minify.js @@ -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};'; -- 2.34.1