Skip to content

Commit 1dbd1ed

Browse files
authored
Merge pull request #34 from AdamGold/master
fix: 🐛 fix prototype pollution
2 parents 018e488 + 8c998b5 commit 1dbd1ed

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ api.set = function set (obj, pointer, value) {
7575

7676
for (var i = 0; i < refTokens.length - 1; ++i) {
7777
var tok = refTokens[i];
78+
if (tok === "__proto__" || tok === "constructor" || tok === "prototype") {
79+
continue
80+
}
7881
if (tok === '-' && Array.isArray(obj)) {
7982
tok = obj.length;
8083
}

test/test.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,4 +436,31 @@ describe('convenience api wrapper', function() {
436436
objPointer.get(immutable(['oo-style'])).should.equal('bla');
437437
objPointer.get(immutable(['example', '0'])).should.equal('bla2');
438438
});
439+
440+
it('should not set __proto__', function () {
441+
var obj = {}, objPointer = pointer(obj);
442+
expect(obj.polluted).to.be.undefined();
443+
objPointer.set('/__proto__/polluted', true);
444+
expect(obj.polluted).to.be.undefined();
445+
var obj2 = {};
446+
expect(obj2.polluted).to.be.undefined();
447+
});
448+
449+
it('should not set prototype', function () {
450+
var obj = {}, objPointer = pointer(obj);
451+
expect(obj.polluted).to.be.undefined();
452+
objPointer.set('/prototype/polluted', true);
453+
expect(obj.polluted).to.be.undefined();
454+
var obj2 = {};
455+
expect(obj2.polluted).to.be.undefined();
456+
});
457+
458+
it('should not set constructor', function () {
459+
var obj = {}, objPointer = pointer(obj);
460+
expect(obj.polluted).to.be.undefined();
461+
objPointer.set('/constructor/prototype/polluted', true);
462+
expect(obj.polluted).to.be.undefined();
463+
var obj2 = {};
464+
expect(obj2.polluted).to.be.undefined();
465+
});
439466
});

0 commit comments

Comments
 (0)