Skip to content

Commit 8485685

Browse files
Merge pull request #1697 from microsoft/mk/fix-ref-bug
Fix invalid reference bug
2 parents bb9e5b5 + f9fc4db commit 8485685

File tree

5 files changed

+49
-3
lines changed

5 files changed

+49
-3
lines changed

src/Microsoft.OpenApi/Properties/SRResource.Designer.cs

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Microsoft.OpenApi/Properties/SRResource.resx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@
139139
<value>Invalid Reference identifier '{0}'.</value>
140140
</data>
141141
<data name="InvalidReferenceType" xml:space="preserve">
142-
<value>Invalid Reference Type.</value>
142+
<value>Invalid Reference Type '{0}'.</value>
143143
</data>
144144
<data name="LocalReferenceRequiresType" xml:space="preserve">
145145
<value>Local reference must have type specified.</value>

src/Microsoft.OpenApi/Services/OpenApiReferenceResolver.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,13 @@ private void ResolveTags(IList<OpenApiTag> tags)
259259
{
260260
try
261261
{
262+
var referencedObject = typeof(T).Name;
263+
var referenceType = reference?.Type.ToString();
264+
if (referenceType is not null && !referencedObject.Contains(referenceType))
265+
{
266+
throw new OpenApiException(string.Format(Properties.SRResource.InvalidReferenceType, referenceType));
267+
}
268+
262269
return _currentDocument.ResolveReference(reference, false) as T;
263270
}
264271
catch (OpenApiException ex)

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
using System.Threading;
1010
using FluentAssertions;
1111
using Microsoft.OpenApi.Any;
12+
using Microsoft.OpenApi.Exceptions;
1213
using Microsoft.OpenApi.Interfaces;
1314
using Microsoft.OpenApi.Models;
15+
using Microsoft.OpenApi.Readers.Interface;
1416
using Microsoft.OpenApi.Validations;
1517
using Microsoft.OpenApi.Validations.Rules;
1618
using Microsoft.OpenApi.Writers;
@@ -1355,5 +1357,15 @@ public void ValidateExampleShouldNotHaveDataTypeMismatch()
13551357
var warnings = diagnostic.Warnings;
13561358
Assert.False(warnings.Any());
13571359
}
1360+
1361+
[Fact]
1362+
public void ParseDocumetWithWrongReferenceTypeShouldReturnADiagnosticError()
1363+
{
1364+
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "docWithWrongRef.json"));
1365+
_ = new OpenApiStreamReader().Read(stream, out var diagnostic);
1366+
1367+
diagnostic.Errors.Should().BeEquivalentTo(new List<OpenApiError> {
1368+
new( new OpenApiException("Invalid Reference Type 'Schema'.")) });
1369+
}
13581370
}
13591371
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"openapi":"3.0.0",
3+
"info":{
4+
"title":"some api",
5+
"description":"some description",
6+
"version": "1"
7+
},
8+
"servers":[{"url":"https://localhost"}],
9+
"paths":{
10+
"/count":{
11+
"get":{
12+
"responses":{
13+
"200":{
14+
"$ref":"#/components/schemas/count"
15+
},
16+
},
17+
}
18+
}
19+
},
20+
"components":{
21+
"schemas":{
22+
"count":{
23+
"type": "number"
24+
}
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)