Skip to content

Commit 2f64478

Browse files
Merge pull request #1581 from microsoft/mk/fix-stream-leave-open
Fix OpenApiStreamReader.ReadAsync doesn't respect "leave open" setting
2 parents e65b484 + 9036a21 commit 2f64478

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public async Task<ReadResult> ReadAsync(Stream input, CancellationToken cancella
7373
bufferedStream.Position = 0;
7474
}
7575

76-
using var reader = new StreamReader(bufferedStream);
76+
using var reader = new StreamReader(bufferedStream, default, true, -1, _settings.LeaveStreamOpen);
7777
return await new OpenApiTextReaderReader(_settings).ReadAsync(reader, cancellationToken);
7878
}
7979

test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,21 @@ public void StreamShouldNotCloseIfLeaveStreamOpenSettingEqualsTrue()
2727
reader.Read(stream, out _);
2828
Assert.True(stream.CanRead);
2929
}
30+
31+
[Fact]
32+
public async void StreamShouldNotBeDisposedIfLeaveStreamOpenSettingIsTrue()
33+
{
34+
var memoryStream = new MemoryStream();
35+
using var fileStream = Resources.GetStream(Path.Combine(SampleFolderPath, "petStore.yaml"));
36+
37+
await fileStream.CopyToAsync(memoryStream);
38+
memoryStream.Position = 0;
39+
var stream = memoryStream;
40+
41+
var reader = new OpenApiStreamReader(new() { LeaveStreamOpen = true });
42+
_ = await reader.ReadAsync(stream);
43+
stream.Seek(0, SeekOrigin.Begin); // does not throw an object disposed exception
44+
Assert.True(stream.CanRead);
45+
}
3046
}
3147
}

0 commit comments

Comments
 (0)