Skip to content

Commit e14258d

Browse files
authored
Merge pull request #2408 from microsoft/fix/throw-on-circular-reference
fix: throw on circular reference
2 parents 09444c0 + caea292 commit e14258d

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,10 @@ public bool Contains(string location)
376376
// Prevent infinite recursion in case of circular references
377377
if (visitedSchemas.Contains(schema))
378378
{
379-
return null;
379+
if (schema is OpenApiSchemaReference openApiSchemaReference)
380+
throw new InvalidOperationException($"Circular reference detected while resolving schema: {openApiSchemaReference.Reference.ReferenceV3}");
381+
else
382+
throw new InvalidOperationException($"Circular reference detected while resolving schema");
380383
}
381384
visitedSchemas.Push(schema);
382385
// Traverse schema object to resolve subschemas

test/Microsoft.OpenApi.Readers.Tests/V31Tests/RelativeReferenceTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -502,9 +502,9 @@ public void ExitsEarlyOnCyclicalReferences()
502502
document.RegisterComponents();
503503

504504
var tagsSchemaRef = Assert.IsType<OpenApiSchemaReference>(categorySchema.Properties["tags"]);
505-
Assert.Null(tagsSchemaRef.Items);
505+
Assert.Throws<InvalidOperationException>(() => tagsSchemaRef.Items);
506506
Assert.Equal("#/components/schemas/Category/properties/parent/properties/tags", tagsSchemaRef.Reference.ReferenceV3);
507-
Assert.Null(tagsSchemaRef.Target);
507+
Assert.Throws<InvalidOperationException>(() => tagsSchemaRef.Target);
508508

509509
var parentSchemaRef = Assert.IsType<OpenApiSchemaReference>(categorySchema.Properties["parent"]);
510510
Assert.Equal("#/components/schemas/Category", parentSchemaRef.Reference.ReferenceV3);

0 commit comments

Comments
 (0)