Skip to content

Commit f1fc4fc

Browse files
authored
Merge pull request #249 from Cysharp/hadashiA/fix-brotli-encoder
Fix BrotliCompressor.CopyToAsync buffer is not enough
2 parents 37c9d53 + 6bd9b32 commit f1fc4fc

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

src/MemoryPack.Core/Compression/BrotliCompressor.cs

+11-3
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,18 @@ public async ValueTask CopyToAsync(Stream stream, int bufferSize = 65535, Cancel
174174
}
175175

176176
// call BrotliEncoderOperation.Finish
177-
var finalStatus = encoder.Compress(ReadOnlySpan<byte>.Empty, buffer, out var consumed, out var written, isFinalBlock: true);
178-
if (written > 0)
177+
var finalStatus = OperationStatus.DestinationTooSmall;
178+
while (finalStatus == OperationStatus.DestinationTooSmall)
179179
{
180-
await stream.WriteAsync(buffer.AsMemory(0, written), cancellationToken).ConfigureAwait(false);
180+
finalStatus = encoder.Compress(ReadOnlySpan<byte>.Empty, buffer, out var consumed, out var written, isFinalBlock: true);
181+
if (written > 0)
182+
{
183+
await stream.WriteAsync(buffer.AsMemory(0, written), cancellationToken).ConfigureAwait(false);
184+
}
185+
}
186+
if (finalStatus != OperationStatus.Done)
187+
{
188+
MemoryPackSerializationException.ThrowCompressionFailed(finalStatus);
181189
}
182190
}
183191
finally

0 commit comments

Comments
 (0)