From da0f0d8dd17018bc86a4a28febdfb7aec5b928d0 Mon Sep 17 00:00:00 2001 From: iRumba Date: Sun, 28 Apr 2019 20:31:19 +0700 Subject: [PATCH] Fixed merging with self bug. --- Src/Newtonsoft.Json.Tests/Linq/MergeTests.cs | 8 ++++++++ Src/Newtonsoft.Json/Linq/JContainer.cs | 2 ++ 2 files changed, 10 insertions(+) diff --git a/Src/Newtonsoft.Json.Tests/Linq/MergeTests.cs b/Src/Newtonsoft.Json.Tests/Linq/MergeTests.cs index 6c86b8a3..0a4c7331 100644 --- a/Src/Newtonsoft.Json.Tests/Linq/MergeTests.cs +++ b/Src/Newtonsoft.Json.Tests/Linq/MergeTests.cs @@ -46,6 +46,14 @@ namespace Newtonsoft.Json.Tests.Linq [TestFixture] public class MergeTests : TestFixtureBase { + [Test] + public void MergeSelf() + { + var a = new JArray { "1", "2" }; + a.Merge(a, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Replace }); + Assert.AreEqual(a, new JArray { "1", "2" }); + } + [Test] public void MergeNullString() { diff --git a/Src/Newtonsoft.Json/Linq/JContainer.cs b/Src/Newtonsoft.Json/Linq/JContainer.cs index f1d8ed09..3e1a6449 100644 --- a/Src/Newtonsoft.Json/Linq/JContainer.cs +++ b/Src/Newtonsoft.Json/Linq/JContainer.cs @@ -1164,6 +1164,8 @@ namespace Newtonsoft.Json.Linq #endif break; case MergeArrayHandling.Replace: + if (target == content) + break; target.ClearItems(); foreach (JToken item in content) {