mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-29 06:27:49 +00:00
fix(zipObjectDeep): prototype pollution (#4759)
This commit is contained in:
@@ -3990,6 +3990,10 @@
|
|||||||
var key = toKey(path[index]),
|
var key = toKey(path[index]),
|
||||||
newValue = value;
|
newValue = value;
|
||||||
|
|
||||||
|
if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
if (index != lastIndex) {
|
if (index != lastIndex) {
|
||||||
var objValue = nested[key];
|
var objValue = nested[key];
|
||||||
newValue = customizer ? customizer(objValue, key, nested) : undefined;
|
newValue = customizer ? customizer(objValue, key, nested) : undefined;
|
||||||
|
|||||||
33
test/test.js
33
test/test.js
@@ -25799,6 +25799,39 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// zipObjectDeep prototype pollution
|
||||||
|
['__proto__', 'constructor', 'prototype'].forEach(function (keyToTest) {
|
||||||
|
QUnit.test('zipObjectDeep is not setting ' + keyToTest + ' on global', function (assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
|
||||||
|
_.zipObjectDeep([keyToTest + '.a'], ['newValue']);
|
||||||
|
// Can't access plain `a` as it's not defined and test fails
|
||||||
|
assert.notEqual(root['a'], 'newValue');
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('zipObjectDeep is not overwriting ' + keyToTest + ' on vars', function (assert) {
|
||||||
|
assert.expect(3);
|
||||||
|
|
||||||
|
const b = 'oldValue'
|
||||||
|
_.zipObjectDeep([keyToTest + '.b'], ['newValue']);
|
||||||
|
assert.equal(b, 'oldValue');
|
||||||
|
assert.notEqual(root['b'], 'newValue');
|
||||||
|
|
||||||
|
// ensure nothing was created
|
||||||
|
assert.notOk(root['b']);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('zipObjectDeep is not overwriting global.' + keyToTest, function (assert) {
|
||||||
|
assert.expect(2);
|
||||||
|
|
||||||
|
_.zipObjectDeep([root + '.' + keyToTest + '.c'], ['newValue']);
|
||||||
|
assert.notEqual(root['c'], 'newValue');
|
||||||
|
|
||||||
|
// ensure nothing was created
|
||||||
|
assert.notOk(root['c']);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
QUnit.module('lodash.zipWith');
|
QUnit.module('lodash.zipWith');
|
||||||
|
|||||||
Reference in New Issue
Block a user