@@ -151,14 +151,6 @@ public async ValueTask CopyToAsync(Stream stream, int bufferSize = 65535, Cancel
151
151
152
152
using var encoder = new BrotliEncoder ( quality , window ) ;
153
153
154
- foreach ( var item in bufferWriter )
155
- {
156
- if ( item . Length > bufferSize )
157
- {
158
- bufferSize = item . Length ;
159
- }
160
- }
161
-
162
154
var buffer = ArrayPool < byte > . Shared . Rent ( bufferSize ) ;
163
155
try
164
156
{
@@ -182,14 +174,18 @@ public async ValueTask CopyToAsync(Stream stream, int bufferSize = 65535, Cancel
182
174
}
183
175
184
176
// call BrotliEncoderOperation.Finish
185
- var finalStatus = encoder . Compress ( ReadOnlySpan < byte > . Empty , buffer , out var consumed , out var written , isFinalBlock : true ) ;
186
- if ( finalStatus != OperationStatus . Done )
177
+ var finalStatus = OperationStatus . DestinationTooSmall ;
178
+ while ( finalStatus == OperationStatus . DestinationTooSmall )
187
179
{
188
- MemoryPackSerializationException . ThrowCompressionFailed ( finalStatus ) ;
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
+ }
189
185
}
190
- if ( written > 0 )
186
+ if ( finalStatus != OperationStatus . Done )
191
187
{
192
- await stream . WriteAsync ( buffer . AsMemory ( 0 , written ) , cancellationToken ) . ConfigureAwait ( false ) ;
188
+ MemoryPackSerializationException . ThrowCompressionFailed ( finalStatus ) ;
193
189
}
194
190
}
195
191
finally
0 commit comments