Skip to content

Commit 3f92a15

Browse files
mnesporljharb
authored andcommitted
Copy __proto__ successfully in older engines
- If Object.defineProperty is unavailable, fall back to regular assignment - In getProperty(), return undefined instead of {} when getting __proto__ - Improve style in the __proto__ test
1 parent e46c95e commit 3f92a15

File tree

2 files changed

+4
-5
lines changed

2 files changed

+4
-5
lines changed

index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ var isPlainObject = function isPlainObject(obj) {
3131
return typeof key === 'undefined' || hasOwn.call(obj, key);
3232
};
3333

34-
// If name is '__proto__', define it as an own property on target
34+
// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target
3535
var setProperty = function setProperty(target, options) {
36-
if (options.name === '__proto__') {
36+
if (Object.defineProperty && options.name === '__proto__') {
3737
Object.defineProperty(target, options.name, {
3838
enumerable: true,
3939
configurable: true,
@@ -48,7 +48,7 @@ var setProperty = function setProperty(target, options) {
4848
// Return a new object instead of __proto__ if '__proto__' is not an own property
4949
var getProperty = function getProperty(obj, name) {
5050
if (name === '__proto__' && !hasOwn.call(obj, name)) {
51-
return {};
51+
return undefined;
5252
}
5353

5454
return obj[name];

test/index.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,6 @@ test('__proto__ is merged as an own property', function (t) {
633633
extend(true, target, malicious);
634634
t.notOk(target.george);
635635
t.ok(Object.prototype.hasOwnProperty.call(target, '__proto__'));
636-
var name = '__proto__';
637-
t.equal(target[name].george, 1);
636+
t.deepEqual(target.__proto__, { george: 1 }); // eslint-disable-line no-proto
638637
t.end();
639638
});

0 commit comments

Comments
 (0)