From ca87c48cd74ec6095582e7b8de4a10e937df3898 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 28 Jul 2025 14:26:03 -0400 Subject: [PATCH] Fix issue with determining compression type in MS-CAB --- BinaryObjectScanner/FileType/MicrosoftCAB.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/BinaryObjectScanner/FileType/MicrosoftCAB.cs b/BinaryObjectScanner/FileType/MicrosoftCAB.cs index c5eb0da7..efea2cf7 100644 --- a/BinaryObjectScanner/FileType/MicrosoftCAB.cs +++ b/BinaryObjectScanner/FileType/MicrosoftCAB.cs @@ -140,20 +140,20 @@ namespace BinaryObjectScanner.FileType continue; // Uncompressed data - if ((folder.CompressionType & CompressionType.TYPE_NONE) != 0) + if ((folder.CompressionType & CompressionType.MASK_TYPE) == CompressionType.TYPE_NONE) { ms.Write(db.CompressedData, 0, db.CompressedData.Length); ms.Flush(); } // MS-ZIP - else if ((folder.CompressionType & CompressionType.TYPE_MSZIP) != 0) + else if ((folder.CompressionType & CompressionType.MASK_TYPE) == CompressionType.TYPE_MSZIP) { mszip.CopyTo(db.CompressedData, ms); } // Quantum - else if ((folder.CompressionType & CompressionType.TYPE_QUANTUM) != 0) + else if ((folder.CompressionType & CompressionType.MASK_TYPE) == CompressionType.TYPE_QUANTUM) { var quantum = SabreTools.Compression.Quantum.Decompressor.Create(db.CompressedData, quantumWindowBits); byte[] data = quantum.Process(); @@ -162,7 +162,7 @@ namespace BinaryObjectScanner.FileType } // LZX - else if ((folder.CompressionType & CompressionType.TYPE_LZX) != 0) + else if ((folder.CompressionType & CompressionType.MASK_TYPE) == CompressionType.TYPE_LZX) { // TODO: Unsupported continue; @@ -206,7 +206,7 @@ namespace BinaryObjectScanner.FileType { int prevFolderIndex = prev.Model.Header.FolderCount; var prevFolder = prev.Model.Folders[prevFolderIndex - 1]; - prevBlocks = GetDataBlocks(prev, file, prevFolder, folderIndex, skipNext: true) ?? []; + prevBlocks = GetDataBlocks(prev, file, prevFolder, prevFolderIndex, skipNext: true) ?? []; } } @@ -217,9 +217,8 @@ namespace BinaryObjectScanner.FileType var next = OpenNext(cabArchive, file); if (next?.Model?.Header != null && next.Model.Folders != null) { - int nextFolderIndex = next.Model.Header.FolderCount; - var nextFolder = next.Model.Folders[nextFolderIndex - 1]; - nextBlocks = GetDataBlocks(next, file, nextFolder, folderIndex, skipPrev: true) ?? []; + var nextFolder = next.Model.Folders[0]; + nextBlocks = GetDataBlocks(next, file, nextFolder, 0, skipPrev: true) ?? []; } }