mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-07-08 18:16:30 +00:00
review fixes
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -66,9 +67,12 @@ public sealed partial class XZBlock
|
||||
await BaseStream
|
||||
.ReadExactAsync(paddingBytes, 0, size, cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
if (paddingBytes.Any(b => b != 0))
|
||||
for (var i = 0; i < size; i++)
|
||||
{
|
||||
throw new InvalidFormatException("Padding bytes were non-null");
|
||||
if (paddingBytes[i] != 0)
|
||||
{
|
||||
throw new InvalidFormatException("Padding bytes were non-null");
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
@@ -87,7 +91,7 @@ public sealed partial class XZBlock
|
||||
await BaseStream
|
||||
.ReadExactAsync(crc, 0, _checkSize, cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
VerifyCheck(crc);
|
||||
VerifyCheck(crc.AsSpan().Slice(0, _checkSize));
|
||||
_crcChecked = true;
|
||||
}
|
||||
finally
|
||||
|
||||
@@ -98,10 +98,17 @@ public sealed partial class XZBlock : XZReadOnlyStream
|
||||
|
||||
private void CheckCrc()
|
||||
{
|
||||
var crc = new byte[_checkSize];
|
||||
BaseStream.ReadExact(crc, 0, _checkSize);
|
||||
VerifyCheck(crc);
|
||||
_crcChecked = true;
|
||||
var crc = ArrayPool<byte>.Shared.Rent(_checkSize);
|
||||
try
|
||||
{
|
||||
BaseStream.ReadExact(crc, 0, _checkSize);
|
||||
VerifyCheck(crc.AsSpan().Slice(0, _checkSize));
|
||||
_crcChecked = true;
|
||||
}
|
||||
finally
|
||||
{
|
||||
ArrayPool<byte>.Shared.Return(crc);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateCheck(byte[] buffer, int offset, int count)
|
||||
@@ -127,7 +134,7 @@ public sealed partial class XZBlock : XZReadOnlyStream
|
||||
}
|
||||
}
|
||||
|
||||
private void VerifyCheck(byte[] expected)
|
||||
private void VerifyCheck(ReadOnlySpan<byte> expected)
|
||||
{
|
||||
switch (_checkType)
|
||||
{
|
||||
@@ -147,7 +154,7 @@ public sealed partial class XZBlock : XZReadOnlyStream
|
||||
}
|
||||
}
|
||||
|
||||
private static void GetLittleEndianBytes(uint value, byte[] expected)
|
||||
private static void GetLittleEndianBytes(uint value, ReadOnlySpan<byte> expected)
|
||||
{
|
||||
var bytes = ArrayPool<byte>.Shared.Rent(sizeof(uint));
|
||||
try
|
||||
@@ -164,7 +171,7 @@ public sealed partial class XZBlock : XZReadOnlyStream
|
||||
}
|
||||
}
|
||||
|
||||
private static void GetLittleEndianBytes(ulong value, byte[] expected)
|
||||
private static void GetLittleEndianBytes(ulong value, ReadOnlySpan<byte> expected)
|
||||
{
|
||||
var bytes = ArrayPool<byte>.Shared.Rent(sizeof(ulong));
|
||||
try
|
||||
@@ -181,7 +188,7 @@ public sealed partial class XZBlock : XZReadOnlyStream
|
||||
}
|
||||
}
|
||||
|
||||
private void FinalizeSha256Check(byte[] expected)
|
||||
private void FinalizeSha256Check(ReadOnlySpan<byte> expected)
|
||||
{
|
||||
_sha256.NotNull().TransformFinalBlock(Array.Empty<byte>(), 0, 0);
|
||||
if (!expected.SequenceEqual(_sha256.NotNull().Hash))
|
||||
|
||||
@@ -17,7 +17,7 @@ public class LzmaStreamAsyncTests : TestBase
|
||||
{
|
||||
using var stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "bad-1-lzma2-7.xz"));
|
||||
|
||||
var xz = new XZStream(stream);
|
||||
using var xz = new XZStream(stream);
|
||||
await Assert.ThrowsAsync<InvalidFormatException>(async () =>
|
||||
await xz.TransferToAsync(Stream.Null, long.MaxValue)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user