review fixes

This commit is contained in:
Adam Hathcock
2026-06-13 10:00:39 +01:00
parent 7814013995
commit 160ba0938a
3 changed files with 23 additions and 12 deletions

View File

@@ -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

View File

@@ -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))

View File

@@ -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)
);