diff --git a/src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs b/src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs index e96aa4b12..ae01833fb 100644 --- a/src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs +++ b/src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs @@ -73,7 +73,7 @@ public async Task ReadAsync(Stream input, CancellationToken cancella bufferedStream.Position = 0; } - using var reader = new StreamReader(bufferedStream); + using var reader = new StreamReader(bufferedStream, default, true, -1, _settings.LeaveStreamOpen); return await new OpenApiTextReaderReader(_settings).ReadAsync(reader, cancellationToken); } diff --git a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs index 91e271549..d3b19eff1 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs @@ -27,5 +27,21 @@ public void StreamShouldNotCloseIfLeaveStreamOpenSettingEqualsTrue() reader.Read(stream, out _); Assert.True(stream.CanRead); } + + [Fact] + public async void StreamShouldNotBeDisposedIfLeaveStreamOpenSettingIsTrue() + { + var memoryStream = new MemoryStream(); + using var fileStream = Resources.GetStream(Path.Combine(SampleFolderPath, "petStore.yaml")); + + await fileStream.CopyToAsync(memoryStream); + memoryStream.Position = 0; + var stream = memoryStream; + + var reader = new OpenApiStreamReader(new() { LeaveStreamOpen = true }); + _ = await reader.ReadAsync(stream); + stream.Seek(0, SeekOrigin.Begin); // does not throw an object disposed exception + Assert.True(stream.CanRead); + } } }