From e9588963bcb8acf6075d674f6a237d34b2089114 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 3 Oct 2024 12:01:43 +0300 Subject: [PATCH 1/2] If the input stream is JSON, read directly from stream, otherwise buffer it into memory --- .../Reader/OpenApiModelFactory.cs | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs index d81bedabb..e9f3c297b 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs @@ -98,24 +98,27 @@ public static async Task LoadAsync(Stream input, string format, Open Utils.CheckArgumentNull(format, nameof(format)); settings ??= new OpenApiReaderSettings(); - MemoryStream bufferedStream; - if (input is MemoryStream stream) + Stream preparedStream; + + // Avoid buffering for JSON format + if (input is MemoryStream || format.Equals(OpenApiConstants.Json, StringComparison.OrdinalIgnoreCase)) { - bufferedStream = stream; + preparedStream = input; } else { - // Buffer stream so that OpenApiTextReaderReader can process it synchronously - // YamlDocument doesn't support async reading. - bufferedStream = new MemoryStream(); - await input.CopyToAsync(bufferedStream, 81920, cancellationToken); - bufferedStream.Position = 0; + // Buffer stream for non-JSON formats (e.g., YAML) since they require synchronous reading + preparedStream = new MemoryStream(); + await input.CopyToAsync(preparedStream, 81920, cancellationToken); + preparedStream.Position = 0; } - using var reader = new StreamReader(bufferedStream, default, true, -1, settings.LeaveStreamOpen); + // Use StreamReader to process the prepared stream (buffered for YAML, direct for JSON) + using var reader = new StreamReader(preparedStream, default, true, -1, settings.LeaveStreamOpen); return await LoadAsync(reader, format, settings, cancellationToken); } + /// /// Loads the TextReader input and parses it into an Open API document. /// From e0f20d00b2c554282b26aaf03c9739806a8bd516 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 3 Oct 2024 12:30:56 +0300 Subject: [PATCH 2/2] Clean up comment --- src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs index e9f3c297b..6aeaa8067 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs @@ -100,7 +100,7 @@ public static async Task LoadAsync(Stream input, string format, Open Stream preparedStream; - // Avoid buffering for JSON format + // Avoid buffering for JSON documents if (input is MemoryStream || format.Equals(OpenApiConstants.Json, StringComparison.OrdinalIgnoreCase)) { preparedStream = input;