From: Alex Lam S.L Date: Tue, 22 Dec 2020 18:16:04 +0000 (+0000) Subject: fix corner case when parsing expression (#4435) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=f85a206b9ed5b39726a2da39680056c09d3f9687;p=UglifyJS.git fix corner case when parsing expression (#4435) --- diff --git a/lib/parse.js b/lib/parse.js index 111be3b5..87293cab 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -737,7 +737,7 @@ function parse($TEXT, options) { function semicolon(optional) { if (is("punc", ";")) next(); - else if (!optional && !can_insert_semicolon()) expect_token("punc", ";"); + else if (!optional && !can_insert_semicolon()) expect(";"); } function parenthesised() { @@ -1166,7 +1166,7 @@ function parse($TEXT, options) { expect("{"); var a = []; while (!is("punc", "}")) { - if (is("eof")) expect_token("punc", "}"); + if (is("eof")) expect("}"); a.push(statement()); } next(); @@ -1177,7 +1177,7 @@ function parse($TEXT, options) { expect("{"); var a = [], branch, cur, default_branch, tmp; while (!is("punc", "}")) { - if (is("eof")) expect_token("punc", "}"); + if (is("eof")) expect("}"); if (is("keyword", "case")) { if (branch) branch.end = prev(); cur = []; @@ -1561,9 +1561,8 @@ function parse($TEXT, options) { } function as_name() { - if (!is("name")) expect_token("name"); var name = S.token.value; - next(); + expect_token("name"); return name; } @@ -1861,7 +1860,9 @@ function parse($TEXT, options) { if (options.expression) { handle_regexp(); - return expression(); + var exp = expression(); + expect_token("eof"); + return exp; } return function() { diff --git a/test/mocha/number-literal.js b/test/mocha/number-literal.js index a2b16a9e..61c3a6d6 100644 --- a/test/mocha/number-literal.js +++ b/test/mocha/number-literal.js @@ -89,4 +89,13 @@ describe("Number literals", function() { }, code); }); }); + it("Should reject invalid syntax under expression=true", function() { + assert.throws(function() { + UglifyJS.parse("42.g", { + expression: true, + }); + }, function(e) { + return e instanceof UglifyJS.JS_Parse_Error; + }); + }); });