Fix HttpResponseStreamWriter (#19216)
This commit is contained in:
parent
5a0526dfd9
commit
ee8d8439dd
|
|
@ -135,20 +135,18 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
throw new ObjectDisposedException(nameof(HttpResponseStreamWriter));
|
throw new ObjectDisposedException(nameof(HttpResponseStreamWriter));
|
||||||
}
|
}
|
||||||
|
|
||||||
var written = 0;
|
var remaining = value.Length;
|
||||||
while (written < value.Length)
|
while (remaining > 0)
|
||||||
{
|
{
|
||||||
if (_charBufferCount == _charBufferSize)
|
if (_charBufferCount == _charBufferSize)
|
||||||
{
|
{
|
||||||
FlushInternal(flushEncoder: false);
|
FlushInternal(flushEncoder: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
written = CopyToCharBuffer(value);
|
var written = CopyToCharBuffer(value);
|
||||||
|
|
||||||
if (written < value.Length)
|
remaining -= written;
|
||||||
{
|
value = value.Slice(written);
|
||||||
value = value.Slice(written);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -339,20 +337,18 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
Debug.Assert(value.Length > 0);
|
Debug.Assert(value.Length > 0);
|
||||||
Debug.Assert(_charBufferSize - _charBufferCount < value.Length);
|
Debug.Assert(_charBufferSize - _charBufferCount < value.Length);
|
||||||
|
|
||||||
int written = 0;
|
var remaining = value.Length;
|
||||||
while (written < value.Length)
|
while (remaining > 0)
|
||||||
{
|
{
|
||||||
if (_charBufferCount == _charBufferSize)
|
if (_charBufferCount == _charBufferSize)
|
||||||
{
|
{
|
||||||
await FlushInternalAsync(flushEncoder: false);
|
await FlushInternalAsync(flushEncoder: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
written = CopyToCharBuffer(value.Span);
|
var written = CopyToCharBuffer(value.Span);
|
||||||
|
|
||||||
if (written < value.Length)
|
remaining -= written;
|
||||||
{
|
value = value.Slice(written);
|
||||||
value = value.Slice(written);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -389,8 +385,8 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
|
|
||||||
private async Task WriteLineAsyncAwaited(ReadOnlyMemory<char> value)
|
private async Task WriteLineAsyncAwaited(ReadOnlyMemory<char> value)
|
||||||
{
|
{
|
||||||
await WriteAsyncAwaited(value);
|
await WriteAsync(value);
|
||||||
await WriteAsyncAwaited(NewLine);
|
await WriteAsync(NewLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We want to flush the stream when Flush/FlushAsync is explicitly
|
// We want to flush the stream when Flush/FlushAsync is explicitly
|
||||||
|
|
|
||||||
|
|
@ -258,6 +258,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
[InlineData(1024)]
|
[InlineData(1024)]
|
||||||
[InlineData(1050)]
|
[InlineData(1050)]
|
||||||
[InlineData(2048)]
|
[InlineData(2048)]
|
||||||
|
[InlineData(HttpResponseStreamWriter.DefaultBufferSize + 1)]
|
||||||
public void WriteReadOnlySpanChar_WritesToStream(int byteLength)
|
public void WriteReadOnlySpanChar_WritesToStream(int byteLength)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
|
@ -290,6 +291,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
[InlineData(1050, "\r\n")]
|
[InlineData(1050, "\r\n")]
|
||||||
[InlineData(2046, "\r\n")]
|
[InlineData(2046, "\r\n")]
|
||||||
[InlineData(2048, "\r\n")]
|
[InlineData(2048, "\r\n")]
|
||||||
|
[InlineData(HttpResponseStreamWriter.DefaultBufferSize + 1, "\r\n")]
|
||||||
public void WriteLineReadOnlySpanChar_WritesToStream(int byteLength, string newLine)
|
public void WriteLineReadOnlySpanChar_WritesToStream(int byteLength, string newLine)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
|
@ -360,6 +362,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
[InlineData(1024)]
|
[InlineData(1024)]
|
||||||
[InlineData(1050)]
|
[InlineData(1050)]
|
||||||
[InlineData(2048)]
|
[InlineData(2048)]
|
||||||
|
[InlineData(HttpResponseStreamWriter.DefaultBufferSize + 1)]
|
||||||
public async Task WriteReadOnlyMemoryAsync_WritesToStream(int byteLength)
|
public async Task WriteReadOnlyMemoryAsync_WritesToStream(int byteLength)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
|
@ -412,6 +415,9 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
[InlineData(1050, 2)]
|
[InlineData(1050, 2)]
|
||||||
[InlineData(2046, 2)]
|
[InlineData(2046, 2)]
|
||||||
[InlineData(2048, 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)
|
public async Task WriteLineReadOnlyMemoryAsync_WritesToStream(int byteLength, int newLineLength)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue