mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-11-15 17:02:03 +00:00
Protect earlier ADC and RAR rentals when later allocation fails
This commit is contained in:
@@ -53,10 +53,11 @@ public static partial class ADCBase
|
||||
var buffer = ArrayPool<byte>.Shared.Rent(bufferSize);
|
||||
var outPosition = 0;
|
||||
var full = false;
|
||||
byte[] temp = ArrayPool<byte>.Shared.Rent(3);
|
||||
byte[]? temp = null;
|
||||
|
||||
try
|
||||
{
|
||||
temp = ArrayPool<byte>.Shared.Rent(3);
|
||||
while (position < input.Length)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
@@ -170,7 +171,10 @@ public static partial class ADCBase
|
||||
finally
|
||||
{
|
||||
ArrayPool<byte>.Shared.Return(buffer);
|
||||
ArrayPool<byte>.Shared.Return(temp);
|
||||
if (temp is not null)
|
||||
{
|
||||
ArrayPool<byte>.Shared.Return(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -667,11 +667,12 @@ internal sealed partial class Unpack
|
||||
{
|
||||
var bitLengthArray = ArrayPool<byte>.Shared.Rent(PackDef.BC);
|
||||
var bitLength = new Memory<byte>(bitLengthArray, 0, PackDef.BC);
|
||||
var tableArray = ArrayPool<byte>.Shared.Rent(PackDef.HUFF_TABLE_SIZE);
|
||||
var table = new Memory<byte>(tableArray, 0, PackDef.HUFF_TABLE_SIZE);
|
||||
byte[]? tableArray = null;
|
||||
|
||||
try
|
||||
{
|
||||
tableArray = ArrayPool<byte>.Shared.Rent(PackDef.HUFF_TABLE_SIZE);
|
||||
var table = new Memory<byte>(tableArray, 0, PackDef.HUFF_TABLE_SIZE);
|
||||
if (inAddr > readTop - 25)
|
||||
{
|
||||
if (!await unpReadBufAsync(cancellationToken).ConfigureAwait(false))
|
||||
@@ -813,7 +814,10 @@ internal sealed partial class Unpack
|
||||
finally
|
||||
{
|
||||
ArrayPool<byte>.Shared.Return(bitLengthArray);
|
||||
ArrayPool<byte>.Shared.Return(tableArray);
|
||||
if (tableArray is not null)
|
||||
{
|
||||
ArrayPool<byte>.Shared.Return(tableArray);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user