Fix HttpResponseStreamWriter (#19216)

This commit is contained in:
Justin Kotalik 2020-02-21 16:16:44 -08:00 committed by GitHub
parent 5a0526dfd9
commit ee8d8439dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 18 deletions

View File

@ -135,20 +135,18 @@ namespace Microsoft.AspNetCore.WebUtilities
throw new ObjectDisposedException(nameof(HttpResponseStreamWriter));
}
var written = 0;
while (written < value.Length)
var remaining = value.Length;
while (remaining > 0)
{
if (_charBufferCount == _charBufferSize)
{
FlushInternal(flushEncoder: false);
}
written = CopyToCharBuffer(value);
if (written < value.Length)
{
value = value.Slice(written);
}
var written = CopyToCharBuffer(value);
remaining -= written;
value = value.Slice(written);
};
}
@ -339,20 +337,18 @@ namespace Microsoft.AspNetCore.WebUtilities
Debug.Assert(value.Length > 0);
Debug.Assert(_charBufferSize - _charBufferCount < value.Length);
int written = 0;
while (written < value.Length)
var remaining = value.Length;
while (remaining > 0)
{
if (_charBufferCount == _charBufferSize)
{
await FlushInternalAsync(flushEncoder: false);
}
written = CopyToCharBuffer(value.Span);
if (written < value.Length)
{
value = value.Slice(written);
}
var written = CopyToCharBuffer(value.Span);
remaining -= written;
value = value.Slice(written);
};
}
@ -389,8 +385,8 @@ namespace Microsoft.AspNetCore.WebUtilities
private async Task WriteLineAsyncAwaited(ReadOnlyMemory<char> value)
{
await WriteAsyncAwaited(value);
await WriteAsyncAwaited(NewLine);
await WriteAsync(value);
await WriteAsync(NewLine);
}
// We want to flush the stream when Flush/FlushAsync is explicitly

View File

@ -258,6 +258,7 @@ namespace Microsoft.AspNetCore.WebUtilities
[InlineData(1024)]
[InlineData(1050)]
[InlineData(2048)]
[InlineData(HttpResponseStreamWriter.DefaultBufferSize + 1)]
public void WriteReadOnlySpanChar_WritesToStream(int byteLength)
{
// Arrange
@ -290,6 +291,7 @@ namespace Microsoft.AspNetCore.WebUtilities
[InlineData(1050, "\r\n")]
[InlineData(2046, "\r\n")]
[InlineData(2048, "\r\n")]
[InlineData(HttpResponseStreamWriter.DefaultBufferSize + 1, "\r\n")]
public void WriteLineReadOnlySpanChar_WritesToStream(int byteLength, string newLine)
{
// Arrange
@ -360,6 +362,7 @@ namespace Microsoft.AspNetCore.WebUtilities
[InlineData(1024)]
[InlineData(1050)]
[InlineData(2048)]
[InlineData(HttpResponseStreamWriter.DefaultBufferSize + 1)]
public async Task WriteReadOnlyMemoryAsync_WritesToStream(int byteLength)
{
// Arrange
@ -412,6 +415,9 @@ namespace Microsoft.AspNetCore.WebUtilities
[InlineData(1050, 2)]
[InlineData(2046, 2)]
[InlineData(2048, 2)]
[InlineData(HttpResponseStreamWriter.DefaultBufferSize + 1, 1)]
[InlineData(HttpResponseStreamWriter.DefaultBufferSize + 1, 2)]
[InlineData(HttpResponseStreamWriter.DefaultBufferSize + 1, HttpResponseStreamWriter.DefaultBufferSize)]
public async Task WriteLineReadOnlyMemoryAsync_WritesToStream(int byteLength, int newLineLength)
{
// Arrange