From c10835d2219df6eb9f650db7c60c77ef3baadd4d Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 30 Sep 2025 13:08:53 -0400 Subject: [PATCH] Start fixing XZ parsing --- SabreTools.Serialization/Readers/XZ.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SabreTools.Serialization/Readers/XZ.cs b/SabreTools.Serialization/Readers/XZ.cs index 3fab8d0b..d901c69b 100644 --- a/SabreTools.Serialization/Readers/XZ.cs +++ b/SabreTools.Serialization/Readers/XZ.cs @@ -149,19 +149,20 @@ namespace SabreTools.Serialization.Readers obj.FilterFlags[i] = ParseFilterFlag(data); } - // Parse the padding as needed - int paddingLength = realHeaderSize - (int)(data.Position - currentOffset); + // Parse the padding as needed, adjusting for CRC size + int paddingLength = realHeaderSize - (int)(data.Position - currentOffset) - 4; if (paddingLength >= 0) obj.HeaderPadding = data.ReadBytes(paddingLength); obj.Crc32 = data.ReadUInt32LittleEndian(); // TODO: How to handle large blocks? - if ((int)obj.UncompressedSize >= 0) + // TODO: Handle unset compressed sizes + if ((int)obj.CompressedSize > 0) obj.CompressedData = data.ReadBytes((int)obj.UncompressedSize); // Parse the padding as needed - paddingLength = (int)obj.UncompressedSize % 4; + paddingLength = (int)obj.CompressedSize % 4; if (paddingLength >= 0) obj.BlockPadding = data.ReadBytes(paddingLength);