minimist
Advanced tools
Comparing version 1.2.2 to 1.2.3
14
index.js
@@ -71,9 +71,17 @@ module.exports = function (args, opts) { | ||
var o = obj; | ||
keys.slice(0,-1).forEach(function (key) { | ||
for (var i = 0; i < keys.length-1; i++) { | ||
var key = keys[i]; | ||
if (key === '__proto__') return; | ||
if (o[key] === undefined) o[key] = {}; | ||
if (o[key] === {}.__proto__) o[key] = {}; | ||
if (o[key] === Object.prototype || o[key] === Number.prototype | ||
|| o[key] === String.prototype) o[key] = {}; | ||
if (o[key] === Array.prototype) o[key] = []; | ||
o = o[key]; | ||
}); | ||
} | ||
var key = keys[keys.length - 1]; | ||
if (key === '__proto__') return; | ||
if (o === Object.prototype || o === Number.prototype | ||
|| o === String.prototype) o = {}; | ||
if (o === Array.prototype) o = []; | ||
if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { | ||
@@ -80,0 +88,0 @@ o[key] = value; |
{ | ||
"name": "minimist", | ||
"version": "1.2.2", | ||
"version": "1.2.3", | ||
"description": "parse argument options", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -7,4 +7,32 @@ var parse = require('../'); | ||
t.equal({}.x, undefined); | ||
t.equal(argv.__proto__.x, 123); | ||
t.equal(argv.__proto__.x, undefined); | ||
t.equal(argv.x, undefined); | ||
t.end(); | ||
}); | ||
test('proto pollution (array)', function (t) { | ||
var argv = parse(['--x','4','--x','5','--x.__proto__.z','789']); | ||
t.equal({}.z, undefined); | ||
t.deepEqual(argv.x, [4,5]); | ||
t.equal(argv.x.z, undefined); | ||
t.equal(argv.x.__proto__.z, undefined); | ||
t.end(); | ||
}); | ||
test('proto pollution (number)', function (t) { | ||
var argv = parse(['--x','5','--x.__proto__.z','100']); | ||
t.equal({}.z, undefined); | ||
t.equal((4).z, undefined); | ||
t.equal(argv.x, 5); | ||
t.equal(argv.x.z, undefined); | ||
t.end(); | ||
}); | ||
test('proto pollution (string)', function (t) { | ||
var argv = parse(['--x','abc','--x.__proto__.z','def']); | ||
t.equal({}.z, undefined); | ||
t.equal('...'.z, undefined); | ||
t.equal(argv.x, 'abc'); | ||
t.equal(argv.x.z, undefined); | ||
t.end(); | ||
}); |
31954
936