From 293c566d6c8c6082c550ce5ca358da4cde124fac Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 9 Jun 2017 04:29:12 +0800 Subject: [PATCH] marshal `mangle[.properties].reserved` from non-Array values (#2072) --- lib/propmangle.js | 3 ++- lib/scope.js | 4 +++- test/mocha/cli.js | 20 ++++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/propmangle.js b/lib/propmangle.js index efb31cc1..f17909d7 100644 --- a/lib/propmangle.js +++ b/lib/propmangle.js @@ -78,7 +78,8 @@ function mangle_properties(ast, options) { reserved: null, }); - var reserved = options.reserved || []; + var reserved = options.reserved; + if (!Array.isArray(reserved)) reserved = []; if (!options.builtins) find_builtins(reserved); var cache = options.cache; diff --git a/lib/scope.js b/lib/scope.js index 8bc96072..ea43f752 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -377,13 +377,15 @@ AST_Symbol.DEFMETHOD("global", function(){ }); AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){ - return defaults(options, { + options = defaults(options, { eval : false, ie8 : false, keep_fnames : false, reserved : [], toplevel : false, }); + if (!Array.isArray(options.reserved)) options.reserved = []; + return options; }); AST_Toplevel.DEFMETHOD("mangle_names", function(options){ diff --git a/test/mocha/cli.js b/test/mocha/cli.js index 0a7f8f2b..3228e4e3 100644 --- a/test/mocha/cli.js +++ b/test/mocha/cli.js @@ -546,4 +546,24 @@ describe("bin/uglifyjs", function () { done(); }); }); + it("Should work with --mangle reserved=[]", function (done) { + var command = uglifyjscmd + ' test/input/issue-505/input.js -m reserved=[callback]'; + + exec(command, function (err, stdout) { + if (err) throw err; + + assert.strictEqual(stdout, 'function test(callback){"aaaaaaaaaaaaaaaa";callback(err,data);callback(err,data)}\n'); + done(); + }); + }); + it("Should work with --mangle reserved=false", function (done) { + var command = uglifyjscmd + ' test/input/issue-505/input.js -m reserved=false'; + + exec(command, function (err, stdout) { + if (err) throw err; + + assert.strictEqual(stdout, 'function test(a){"aaaaaaaaaaaaaaaa";a(err,data);a(err,data)}\n'); + done(); + }); + }); }); -- 2.34.1