From 043a592724cc9fe42c4c8d0e99ab0965c11ad7bb Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 6 Dec 2022 10:44:11 +0300 Subject: [PATCH 1/3] Fixes bug where the schema copy constructor would run into a stack overflow due to wrong copying of AdditionalProperties object --- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index 6019d7362..513b865df 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -280,7 +280,7 @@ public OpenApiSchema(OpenApiSchema schema) MaxProperties = schema?.MaxProperties ?? MaxProperties; MinProperties = schema?.MinProperties ?? MinProperties; AdditionalPropertiesAllowed = schema?.AdditionalPropertiesAllowed ?? AdditionalPropertiesAllowed; - AdditionalProperties = new(schema?.AdditionalProperties); + AdditionalProperties = schema?.AdditionalProperties != null ? new(schema?.AdditionalProperties) : null; Discriminator = schema?.Discriminator != null ? new(schema?.Discriminator) : null; Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor(schema?.Example); Enum = schema?.Enum != null ? new List(schema.Enum) : null; From 8f874266b97222d89c4fa3128d56d520c73416df Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 6 Dec 2022 10:44:49 +0300 Subject: [PATCH 2/3] Add test to validate --- .../Models/OpenApiSchemaTests.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs index 429129c1e..fd6fea2cb 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs @@ -463,5 +463,22 @@ public void SerializeAsV2ShouldSetFormatPropertyInParentSchemaIfPresentInChildre // Assert Assert.Equal(expectedV2Schema, v2Schema); } + + [Fact] + public void OpenApiSchemaCopyConstructorSucceeds() + { + var baseSchema = new OpenApiSchema() + { + Type = "string", + Format = "date" + }; + + var actualSchema = new OpenApiSchema(baseSchema) + { + Nullable = true + }; + + Assert.Equal("string", actualSchema.Type); + } } } From 1dae8dc97198486032006bfce09c6402f1fd18a7 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 6 Dec 2022 10:46:56 +0300 Subject: [PATCH 3/3] Add test assertions --- test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs index fd6fea2cb..447d01337 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs @@ -479,6 +479,8 @@ public void OpenApiSchemaCopyConstructorSucceeds() }; Assert.Equal("string", actualSchema.Type); + Assert.Equal("date", actualSchema.Format); + Assert.True(actualSchema.Nullable); } } }