From 33ec278c533d7ff7bdc4f5fe2b259f309d55b031 Mon Sep 17 00:00:00 2001 From: Oskar Dudycz Date: Thu, 16 May 2019 20:23:09 +0200 Subject: [PATCH] Added failing test case for unexpected StackOverflowException [System.Text.Json] Serializing class that has array of children of the same class throws StackOverflowException (dotnet/corefx#37611) Commit migrated from https://github.com/dotnet/corefx/commit/374833115e24d6384da62fa631acde2e65101eb8 --- .../System.Text.Json/tests/Serialization/CyclicTests.cs | 11 +++++++++++ .../System.Text.Json/tests/Serialization/TestClasses.cs | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/src/libraries/System.Text.Json/tests/Serialization/CyclicTests.cs b/src/libraries/System.Text.Json/tests/Serialization/CyclicTests.cs index 58eb152..19f3856 100644 --- a/src/libraries/System.Text.Json/tests/Serialization/CyclicTests.cs +++ b/src/libraries/System.Text.Json/tests/Serialization/CyclicTests.cs @@ -17,5 +17,16 @@ namespace System.Text.Json.Serialization.Tests // We don't allow cycles; we throw InvalidOperation instead of an unrecoverable StackOverflow. Assert.Throws(() => JsonSerializer.ToString(obj)); } + + [Fact] + [ActiveIssue(37313)] + public static void WriteTestClassWithArrayOfElementsOfTheSameClassWithoutCyclesDoesNotFail() + { + TestClassWithArrayOfElementsOfTheSameClass obj = new TestClassWithArrayOfElementsOfTheSameClass(); + + //It shouldn't throw when there is no real cycle reference, and just empty object is created + string json = JsonSerializer.ToString(obj); + Assert.Equal(@"{}", json); + } } } diff --git a/src/libraries/System.Text.Json/tests/Serialization/TestClasses.cs b/src/libraries/System.Text.Json/tests/Serialization/TestClasses.cs index 22e7eac..4aa8c53 100644 --- a/src/libraries/System.Text.Json/tests/Serialization/TestClasses.cs +++ b/src/libraries/System.Text.Json/tests/Serialization/TestClasses.cs @@ -397,6 +397,11 @@ namespace System.Text.Json.Serialization.Tests } } + public class TestClassWithArrayOfElementsOfTheSameClass + { + public TestClassWithArrayOfElementsOfTheSameClass[] Array { get; set; } + } + public class TestClassWithGenericList : ITestClass { public List MyData { get; set; } -- 2.7.4