From 4574af6fb6a40d00666c1607b177fdf430c19558 Mon Sep 17 00:00:00 2001 From: Alex Rattray Date: Mon, 26 Nov 2018 13:15:37 -0800 Subject: [PATCH 1/2] Do not mutate params object when encoding arrays as objects --- lib/utils.js | 1 + test/utils.spec.js | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/lib/utils.js b/lib/utils.js index d6e5f8d6c2..f20c66f8c0 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -153,6 +153,7 @@ var utils = module.exports = { */ encodeParamWithIntegerIndexes: function(param, data) { if (data[param] !== undefined) { + data = Object.assign({}, data); data[param] = utils.arrayToObject(data[param]); } return data; diff --git a/test/utils.spec.js b/test/utils.spec.js index d03159a421..b252f34854 100644 --- a/test/utils.spec.js +++ b/test/utils.spec.js @@ -264,6 +264,14 @@ describe('utils', function() { var partial = utils.encodeParamWithIntegerIndexes.bind(null, 'paramToEncode'); expect(partial(data)).to.deep.equal(expectedData); }); + + it('does not mutate input variables', function() { + var data = {'paramToEncode': ['value1']}; + var expectedData = {'paramToEncode': {'0': 'value1'}}; + expect(utils.encodeParamWithIntegerIndexes('paramToEncode', data)).to.deep.equal(expectedData); + expect(data).not.to.deep.equal(expectedData); + expect(Array.isArray(data.paramToEncode)).to.equal(true); + }); }); describe('arrayToObject', function() { From dfcd96803156f7b07fca6c73ee21a295074ae5f6 Mon Sep 17 00:00:00 2001 From: Alex Rattray Date: Mon, 26 Nov 2018 13:23:39 -0800 Subject: [PATCH 2/2] Do not mutate data param in general (shallow) --- lib/makeRequest.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/makeRequest.js b/lib/makeRequest.js index a33b8988aa..c55ac3aaa3 100644 --- a/lib/makeRequest.js +++ b/lib/makeRequest.js @@ -55,7 +55,7 @@ function getRequestOpts(self, requestArgs, spec, overrideData) { // Pull request data and options (headers, auth) from args. var dataFromArgs = utils.getDataFromArgs(args); - var data = encode(Object.assign(dataFromArgs, overrideData)); + var data = encode(Object.assign({}, dataFromArgs, overrideData)); var options = utils.getOptionsFromArgs(args); // Validate that there are no more args.