From 74d20edebb6c5ee6150e8e03a42a40ed8c01d1da Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 6 Feb 2025 17:08:21 +0300 Subject: [PATCH 1/2] fix: add meaningful exception message during validation --- src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs | 10 ++++++++-- src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs b/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs index 353435bc8..49d10dc5f 100644 --- a/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs +++ b/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs @@ -11,6 +11,7 @@ using SharpYaml.Serialization; using Microsoft.OpenApi.Models; using System; +using System.Linq; using System.Text; namespace Microsoft.OpenApi.Readers @@ -123,8 +124,13 @@ static JsonNode LoadJsonNodesFromYamlDocument(TextReader input) { var yamlStream = new YamlStream(); yamlStream.Load(input); - var yamlDocument = yamlStream.Documents[0]; - return yamlDocument.ToJsonNode(); + if (yamlStream.Documents.Any()) + { + var yamlDocument = yamlStream.Documents[0]; + return yamlDocument.ToJsonNode(); + } + + throw new InvalidOperationException("No documents found in the YAML stream."); } } } diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs index 9424f053f..c86c014da 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs @@ -278,10 +278,13 @@ private static ReadResult InternalLoad(MemoryStream input, string format, OpenAp { throw new InvalidOperationException("Loading external references are not supported when using synchronous methods."); } + if (input.Length == 0 || input.Position == input.Length) + { + throw new ArgumentException($"Cannot parse the stream: {nameof(input)} is empty or contains no elements."); + } var reader = OpenApiReaderRegistry.GetReader(format); var readResult = reader.Read(input, settings); - return readResult; } From f0146c396ec2bb1e4b3a44a815de0578376e8cdc Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 6 Feb 2025 17:14:56 +0300 Subject: [PATCH 2/2] chore: clean up code and add test --- src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs | 3 +-- .../V31Tests/OpenApiDocumentTests.cs | 8 +++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs b/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs index 49d10dc5f..eba4fd248 100644 --- a/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs +++ b/src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs @@ -126,8 +126,7 @@ static JsonNode LoadJsonNodesFromYamlDocument(TextReader input) yamlStream.Load(input); if (yamlStream.Documents.Any()) { - var yamlDocument = yamlStream.Documents[0]; - return yamlDocument.ToJsonNode(); + return yamlStream.Documents[0].ToJsonNode(); } throw new InvalidOperationException("No documents found in the YAML stream."); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs index 9c391ceb2..6f955e62f 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs @@ -11,8 +11,8 @@ using Microsoft.OpenApi.Writers; using Xunit; using VerifyXunit; -using VerifyTests; using Microsoft.OpenApi.Models.Interfaces; +using System; namespace Microsoft.OpenApi.Readers.Tests.V31Tests { @@ -539,5 +539,11 @@ public async Task ParseDocumentWith31PropertiesWorks() // Assert await Verifier.Verify(actual); } + + [Fact] + public void ParseEmptyMemoryStreamThrowsAnArgumentException() + { + Assert.Throws(() => OpenApiDocument.Load(new MemoryStream())); + } } }