fix corner case when parsing expression (#4435)

This commit is contained in:
Alex Lam S.L
2020-12-22 18:16:04 +00:00
committed by GitHub
parent bba7cd0a70
commit f85a206b9e
2 changed files with 16 additions and 6 deletions

View File

@@ -737,7 +737,7 @@ function parse($TEXT, options) {
function semicolon(optional) { function semicolon(optional) {
if (is("punc", ";")) next(); if (is("punc", ";")) next();
else if (!optional && !can_insert_semicolon()) expect_token("punc", ";"); else if (!optional && !can_insert_semicolon()) expect(";");
} }
function parenthesised() { function parenthesised() {
@@ -1166,7 +1166,7 @@ function parse($TEXT, options) {
expect("{"); expect("{");
var a = []; var a = [];
while (!is("punc", "}")) { while (!is("punc", "}")) {
if (is("eof")) expect_token("punc", "}"); if (is("eof")) expect("}");
a.push(statement()); a.push(statement());
} }
next(); next();
@@ -1177,7 +1177,7 @@ function parse($TEXT, options) {
expect("{"); expect("{");
var a = [], branch, cur, default_branch, tmp; var a = [], branch, cur, default_branch, tmp;
while (!is("punc", "}")) { while (!is("punc", "}")) {
if (is("eof")) expect_token("punc", "}"); if (is("eof")) expect("}");
if (is("keyword", "case")) { if (is("keyword", "case")) {
if (branch) branch.end = prev(); if (branch) branch.end = prev();
cur = []; cur = [];
@@ -1561,9 +1561,8 @@ function parse($TEXT, options) {
} }
function as_name() { function as_name() {
if (!is("name")) expect_token("name");
var name = S.token.value; var name = S.token.value;
next(); expect_token("name");
return name; return name;
} }
@@ -1861,7 +1860,9 @@ function parse($TEXT, options) {
if (options.expression) { if (options.expression) {
handle_regexp(); handle_regexp();
return expression(); var exp = expression();
expect_token("eof");
return exp;
} }
return function() { return function() {

View File

@@ -89,4 +89,13 @@ describe("Number literals", function() {
}, code); }, 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;
});
});
}); });