diff --git a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj
index a018892d6..d73767375 100644
--- a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj
+++ b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj
@@ -3,7 +3,7 @@
netstandard2.0
latest
true
- 1.6.13
+ 1.6.14
OpenAPI.NET Readers for JSON and YAML documents
true
diff --git a/src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs b/src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs
index e96aa4b12..c9431de98 100644
--- a/src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs
+++ b/src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs
@@ -41,14 +41,8 @@ public OpenApiStreamReader(OpenApiReaderSettings settings = null)
/// Instance of newly created OpenApiDocument.
public OpenApiDocument Read(Stream input, out OpenApiDiagnostic diagnostic)
{
- var reader = new StreamReader(input);
- var result = new OpenApiTextReaderReader(_settings).Read(reader, out diagnostic);
- if (!_settings.LeaveStreamOpen)
- {
- reader.Dispose();
- }
-
- return result;
+ using var reader = new StreamReader(input, default, true, -1, _settings.LeaveStreamOpen);
+ return new OpenApiTextReaderReader(_settings).Read(reader, out diagnostic);
}
///
@@ -73,7 +67,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);
}
@@ -86,7 +80,7 @@ public async Task ReadAsync(Stream input, CancellationToken cancella
/// Instance of newly created OpenApiDocument
public T ReadFragment(Stream input, OpenApiSpecVersion version, out OpenApiDiagnostic diagnostic) where T : IOpenApiReferenceable
{
- using var reader = new StreamReader(input);
+ using var reader = new StreamReader(input, default, true, -1, _settings.LeaveStreamOpen);
return new OpenApiTextReaderReader(_settings).ReadFragment(reader, version, out diagnostic);
}
}
diff --git a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj
index 8f17fae72..45b707c96 100644
--- a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj
+++ b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj
@@ -3,7 +3,7 @@
netstandard2.0
Latest
true
- 1.6.13
+ 1.6.14
.NET models with JSON and YAML writers for OpenAPI specification
true
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);
+ }
}
}