improve suspicious option detection (#3749)

This commit is contained in:
Alex Lam S.L
2020-03-12 20:03:47 +00:00
committed by GitHub
parent 421bb7083a
commit 03e968be62

View File

@@ -1012,7 +1012,7 @@ function log_suspects(minify_options, component) {
var defs = default_options[component]; var defs = default_options[component];
var suspects = Object.keys(defs).filter(function(name) { var suspects = Object.keys(defs).filter(function(name) {
var flip = name == "keep_fargs"; var flip = name == "keep_fargs";
if (flip ? name in options : (name in options ? options : defs)[name]) { if (flip === !(name in options ? options : defs)[name]) {
var m = JSON.parse(JSON.stringify(minify_options)); var m = JSON.parse(JSON.stringify(minify_options));
var o = JSON.parse(JSON.stringify(options)); var o = JSON.parse(JSON.stringify(options));
o[name] = flip; o[name] = flip;
@@ -1036,20 +1036,29 @@ function log_suspects(minify_options, component) {
} }
} }
function log_rename(options) { function log_suspects_global(options) {
var m = JSON.parse(options); var o = {};
m.rename = false; UglifyJS.minify("", o);
var result = UglifyJS.minify(original_code, m); var suspects = Object.keys(o).filter(function(component) {
if (result.error) { return typeof o[component] != "object";
errorln("Error testing options.rename"); }).filter(function(component) {
errorln(result.error); var m = JSON.parse(options);
} else { m[component] = false;
var r = sandbox.run_code(result.code, sandbox.has_toplevel(m)); var result = UglifyJS.minify(original_code, m);
if (sandbox.same_stdout(original_result, r)) { if (result.error) {
errorln("Suspicious options:"); errorln("Error testing options." + component);
errorln(" rename"); errorln(result.error);
errorln(); } else {
var r = sandbox.run_code(result.code, sandbox.has_toplevel(m));
return sandbox.same_stdout(original_result, r);
} }
});
if (suspects.length > 0) {
errorln("Suspicious options:");
suspects.forEach(function(name) {
errorln(" " + name);
});
errorln();
} }
} }
@@ -1099,7 +1108,7 @@ function log(options) {
errorln(); errorln();
if (!ok && typeof uglify_code == "string") { if (!ok && typeof uglify_code == "string") {
Object.keys(default_options).forEach(log_suspects.bind(null, JSON.parse(options))); Object.keys(default_options).forEach(log_suspects.bind(null, JSON.parse(options)));
log_rename(options); log_suspects_global(options);
errorln("!!!!!! Failed... round " + round); errorln("!!!!!! Failed... round " + round);
} }
} }