diff --git a/YamlDotNet.Test/Serialization/DeserializerTest.cs b/YamlDotNet.Test/Serialization/DeserializerTest.cs index 7f851c26..64213648 100644 --- a/YamlDotNet.Test/Serialization/DeserializerTest.cs +++ b/YamlDotNet.Test/Serialization/DeserializerTest.cs @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using FluentAssertions; using Xunit; @@ -331,6 +332,42 @@ public void DeserializeWithoutDuplicateKeyChecking_YamlWithDuplicateKeys_DoesNot act = () => sut.Deserialize>>(parser); act.ShouldNotThrow("Because duplicate key checking is not enabled"); } + + [Fact] + public void MergingParserWithMergeObjectWithSequence_ShouldNotThrowException() + { + var yaml = @" +base_level: &base + tenant: + - a1 +Level1: &Level1 + <<: [*base] +Level2: &Level2 + <<: *Level1 +"; + var mergingParserFailed = new MergingParser(new Parser(new StringReader(yaml))); + var deserializer = new DeserializerBuilder().Build(); + Action act = () => deserializer.Deserialize(mergingParserFailed); + act.ShouldNotThrow(); + } + + [Fact] + public void MergingParserWithNestedSequence_ShouldNotThrowException() + { + var yaml = @" +base_level: &base {} +Level1: &Level1 + <<: [*base] +Level2: &Level2 + <<: [*Level1] +Level3: + <<: *Level2 +"; + var mergingParserFailed = new MergingParser(new Parser(new StringReader(yaml))); + var deserializer = new DeserializerBuilder().Build(); + Action act = () => deserializer.Deserialize(mergingParserFailed); + act.ShouldNotThrow(); + } public class Test { diff --git a/YamlDotNet/Core/MergingParser.cs b/YamlDotNet/Core/MergingParser.cs index 2bde3d30..ae3e34e5 100644 --- a/YamlDotNet/Core/MergingParser.cs +++ b/YamlDotNet/Core/MergingParser.cs @@ -140,7 +140,8 @@ private bool HandleSequence(LinkedListNode node) var current = node; while (current != null) { - if (current.Value is SequenceEnd) + if (current.Value is SequenceEnd && + current.Value.Start.Line >= sequenceStart.Value.Start.Line) { events.MarkDeleted(current); return true;