Skip to content

Commit 0a91ce7

Browse files
committed
Fix BrotliCompressor.CopyToAsync buffer is not enough
1 parent 37c9d53 commit 0a91ce7

1 file changed

Lines changed: 9 additions & 0 deletions

File tree

src/MemoryPack.Core/Compression/BrotliCompressor.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@ public async ValueTask CopyToAsync(Stream stream, int bufferSize = 65535, Cancel
157157
foreach (var item in bufferWriter)
158158
{
159159
var source = item;
160+
if (source.Length > buffer.Length)
161+
{
162+
ArrayPool<byte>.Shared.Return(buffer);
163+
buffer = ArrayPool<byte>.Shared.Rent(source.Length);
164+
}
160165
var lastResult = OperationStatus.DestinationTooSmall;
161166
while (lastResult == OperationStatus.DestinationTooSmall)
162167
{
@@ -175,6 +180,10 @@ public async ValueTask CopyToAsync(Stream stream, int bufferSize = 65535, Cancel
175180

176181
// call BrotliEncoderOperation.Finish
177182
var finalStatus = encoder.Compress(ReadOnlySpan<byte>.Empty, buffer, out var consumed, out var written, isFinalBlock: true);
183+
if (finalStatus != OperationStatus.Done)
184+
{
185+
MemoryPackSerializationException.ThrowCompressionFailed(finalStatus);
186+
}
178187
if (written > 0)
179188
{
180189
await stream.WriteAsync(buffer.AsMemory(0, written), cancellationToken).ConfigureAwait(false);

0 commit comments

Comments
 (0)