diff --git a/lodash.js b/lodash.js index c149ccbbf..0af9883e6 100644 --- a/lodash.js +++ b/lodash.js @@ -2529,6 +2529,9 @@ * @param {Array} [stackB=[]] Associates values with source counterparts. */ function baseMerge(object, source, customizer, stackA, stackB) { + if (object === source) { + return; + } var props = (isArray(source) || isTypedArray(source)) ? undefined : keysIn(source); arrayEach(props || source, function(srcValue, key) { if (props) { diff --git a/test/test.js b/test/test.js index e6292e886..544ef5047 100644 --- a/test/test.js +++ b/test/test.js @@ -12293,6 +12293,28 @@ assert.deepEqual(actual, expected); }); + QUnit.test('should skip merging when `object` and `source` are the same value', function(assert) { + assert.expect(1); + + if (defineProperty) { + var object = {}, + pass = true; + + defineProperty(object, 'a', { + 'enumerable': true, + 'configurable': true, + 'get': function() { pass = false; }, + 'set': function() { pass = false; } + }); + + _.merge(object, object); + assert.ok(pass); + } + else { + skipTest(assert); + } + }); + QUnit.test('should convert values to arrays when merging with arrays of `source`', function(assert) { assert.expect(2);