Skip to content
This repository was archived by the owner on Sep 1, 2023. It is now read-only.

Commit 5b383c5

Browse files
committed
don't inadvertantly modify Object.prototype
1 parent cae8100 commit 5b383c5

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

Diff for: index.js

+11
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,17 @@ const objectMerge = (original, patch, removeMode) => {
102102
}
103103
//merge objects
104104
else {
105+
//Don't implicitly mutate Object.prototype but subsitute an empty object
106+
if(original[name] === Object.prototype) {
107+
delete original[name];
108+
109+
Object.defineProperty(original, name, {
110+
enumerable: true,
111+
writable: true,
112+
value: {}
113+
});
114+
}
115+
105116
original[name] = objectMerge(original[name], patch[name], removeMode);
106117
}
107118
}

Diff for: test2.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
patchMerge = require('./index.js');
2+
var obj = {}
3+
console.log("Before : " + obj.isAdmin);
4+
console.log(patchMerge(obj, JSON.parse('{ "__proto__": { "isAdmin": true }}')));
5+
console.log("After : " + obj.isAdmin);

0 commit comments

Comments
 (0)