From dc1944b76861b29d7c5564c51667107ee25e76aa Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 28 Jul 2025 16:11:08 -0400 Subject: [PATCH] Add tracking for MS-ZIP issues --- BinaryObjectScanner/FileType/MicrosoftCAB.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/BinaryObjectScanner/FileType/MicrosoftCAB.cs b/BinaryObjectScanner/FileType/MicrosoftCAB.cs index ef41dcf1..d880d607 100644 --- a/BinaryObjectScanner/FileType/MicrosoftCAB.cs +++ b/BinaryObjectScanner/FileType/MicrosoftCAB.cs @@ -56,10 +56,11 @@ namespace BinaryObjectScanner.FileType continue; // Loop through the files - foreach (var compressedFile in files) + for (int i = 0; i < files.Length; i++) { try { + var compressedFile = files[i]; blockStream.Seek(compressedFile.FolderStartOffset, SeekOrigin.Begin); byte[] fileData = blockStream.ReadBytes((int)compressedFile.FileSize); @@ -151,10 +152,11 @@ namespace BinaryObjectScanner.FileType // Loop through the data blocks var ms = new MemoryStream(); - foreach (var db in dataBlocks) + for (int i = 0; i < dataBlocks.Length; i++) { + var db = dataBlocks[i]; if (db?.CompressedData == null) - continue; + continue; // Uncompressed data if ((folder.CompressionType & CompressionType.MASK_TYPE) == CompressionType.TYPE_NONE) @@ -166,7 +168,10 @@ namespace BinaryObjectScanner.FileType // MS-ZIP else if ((folder.CompressionType & CompressionType.MASK_TYPE) == CompressionType.TYPE_MSZIP) { + long position = ms.Position; mszip.CopyTo(db.CompressedData, ms); + if (ms.Position - position != db.UncompressedSize) + Console.Error.WriteLine($"Data block {i} in folder {folderIndex} did not decompress properly. All files past this point may be corrupt."); } // Quantum