diff --git a/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs b/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs index ad1ea8aa2..651d2206c 100644 --- a/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs +++ b/src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs @@ -376,7 +376,10 @@ public bool Contains(string location) // Prevent infinite recursion in case of circular references if (visitedSchemas.Contains(schema)) { - return null; + if (schema is OpenApiSchemaReference openApiSchemaReference) + throw new InvalidOperationException($"Circular reference detected while resolving schema: {openApiSchemaReference.Reference.ReferenceV3}"); + else + throw new InvalidOperationException($"Circular reference detected while resolving schema"); } visitedSchemas.Push(schema); // Traverse schema object to resolve subschemas diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/RelativeReferenceTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/RelativeReferenceTests.cs index c32f63664..3cae0c533 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/RelativeReferenceTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/RelativeReferenceTests.cs @@ -502,9 +502,9 @@ public void ExitsEarlyOnCyclicalReferences() document.RegisterComponents(); var tagsSchemaRef = Assert.IsType(categorySchema.Properties["tags"]); - Assert.Null(tagsSchemaRef.Items); + Assert.Throws(() => tagsSchemaRef.Items); Assert.Equal("#/components/schemas/Category/properties/parent/properties/tags", tagsSchemaRef.Reference.ReferenceV3); - Assert.Null(tagsSchemaRef.Target); + Assert.Throws(() => tagsSchemaRef.Target); var parentSchemaRef = Assert.IsType(categorySchema.Properties["parent"]); Assert.Equal("#/components/schemas/Category", parentSchemaRef.Reference.ReferenceV3);