Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

NullReferenceException at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.ProcessAnyFields #1021

Copy link
Copy link
@immitev

Description

@immitev
Issue body actions

Describe the bug
The OpenAPI definition at https://sandbox.bcda.cms.gov/api/v1/swagger/ looks like a valid one. But when trying to load it via OpenApiStreamReader there's a NullReferenceException at:

   at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.<>c.<.cctor>b__84_50(OpenApiHeader p)
   at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.ProcessAnyFields[T](MapNode mapNode, T domainObject, AnyFieldMap`1 anyFieldMap)
   at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.LoadHeader(ParseNode node)
   at Microsoft.OpenApi.Readers.ParseNodes.MapNode.<>c__DisplayClass6_0`1.<CreateMap>b__0(KeyValuePair`2 n)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Microsoft.OpenApi.Readers.ParseNodes.MapNode.CreateMap[T](Func`2 map)
   at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.<>c.<.cctor>b__84_131(OpenApiResponse o, ParseNode n)
   at Microsoft.OpenApi.Readers.ParseNodes.PropertyNode.ParseField[T](T parentInstance, IDictionary`2 fixedFields, IDictionary`2 patternFields)
   at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.LoadResponse(ParseNode node)
   at Microsoft.OpenApi.Readers.ParseNodes.MapNode.<>c__DisplayClass7_0`1.<CreateMapWithReference>b__0(KeyValuePair`2 n)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Microsoft.OpenApi.Readers.ParseNodes.MapNode.CreateMapWithReference[T](ReferenceType referenceType, Func`2 map)
   at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.<>c.<.cctor>b__84_15(OpenApiDocument o, ParseNode n)
   at Microsoft.OpenApi.Readers.ParseNodes.PropertyNode.ParseField[T](T parentInstance, IDictionary`2 fixedFields, IDictionary`2 patternFields)
   at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.ParseMap[T](MapNode mapNode, T domainObject, FixedFieldMap`1 fixedFieldMap, PatternFieldMap`1 patternFieldMap, List`1 requiredFields)
   at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.LoadOpenApi(RootNode rootNode)
   at Microsoft.OpenApi.Readers.V2.OpenApiV2VersionService.LoadDocument(RootNode rootNode)
   at Microsoft.OpenApi.Readers.ParsingContext.Parse(YamlDocument yamlDocument)
   at Microsoft.OpenApi.Readers.OpenApiYamlDocumentReader.Read(YamlDocument input, OpenApiDiagnostic& diagnostic)
   at Microsoft.OpenApi.Readers.OpenApiTextReaderReader.Read(TextReader input, OpenApiDiagnostic& diagnostic)
   at Microsoft.OpenApi.Readers.OpenApiStreamReader.Read(Stream input, OpenApiDiagnostic& diagnostic)

To Reproduce
Try to read the attached JSON definition swagger.zip (also available at https://sandbox.bcda.cms.gov/api/v1/swagger/swagger.json ) like this:

using System.Net;
using System.IO;
using Microsoft.OpenApi.Readers;
using Microsoft.OpenApi.Validations;

public static class Program
{
	public static void Main()
	{
		const string url = @"https://sandbox.bcda.cms.gov/api/v1/swagger/swagger.json";

		OpenApiStreamReader reader = new OpenApiStreamReader(new OpenApiReaderSettings
		{
			RuleSet = new ValidationRuleSet()
		});

		Stream stream = ToStream(ReadTextFileFromWeb(url));
		reader.Read(stream, out OpenApiDiagnostic _);
	}

	private static string ReadTextFileFromWeb(string uriString)
	{
		WebRequest request = WebRequest.Create(uriString);
		WebResponse result = request.GetResponse();
		using (WebResponse response = result)
		{
			Stream responseStream = response.GetResponseStream();
			using (StreamReader reader = new StreamReader(responseStream, true))
				return reader.ReadToEnd();
		}
	}

	private static Stream ToStream(string input)
	{
		var stream = new MemoryStream();
		var writer = new StreamWriter(stream);
		writer.Write(input ?? "");
		writer.Flush();
		stream.Position = 0;
		return stream;
	}
}
Reactions are currently unavailable

Metadata

Metadata

Assignees

Labels

type:bugA broken experienceA broken experience

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.