From 6f388102ee106dfefa76d4bef641cbaa0e370764 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 13 Dec 2024 15:13:08 -0500 Subject: [PATCH] Fix MS-ZIP decompression 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 f6a52e04..5343772c 100644 --- a/BinaryObjectScanner/FileType/MicrosoftCAB.cs +++ b/BinaryObjectScanner/FileType/MicrosoftCAB.cs @@ -32,9 +32,6 @@ namespace BinaryObjectScanner.FileType #if NET20 || NET35 || !WIN try { - if (!File.Exists(file)) - return false; - // Create the wrapper var cabArchive = SabreTools.Serialization.Wrappers.MicrosoftCabinet.Create(stream); if (cabArchive?.Model?.Folders == null || cabArchive.Model.Folders.Length == 0) @@ -48,6 +45,10 @@ namespace BinaryObjectScanner.FileType if (folder?.DataBlocks == null || folder.DataBlocks.Length == 0) continue; + // Setup decompressors + var mszip = SabreTools.Compression.MSZIP.Decompressor.Create(); + uint quantumWindowBits = (uint)(((ushort)folder.CompressionType >> 8) & 0x1f); + // Loop through the data blocks var ms = new MemoryStream(); foreach (var db in folder.DataBlocks) @@ -65,16 +66,14 @@ namespace BinaryObjectScanner.FileType // MS-ZIP else if ((folder.CompressionType & CompressionType.TYPE_MSZIP) != 0) { - var decomp = SabreTools.Compression.MSZIP.Decompressor.Create(); - decomp.CopyTo(db.CompressedData, ms); + mszip.CopyTo(db.CompressedData, ms); } // Quantum else if ((folder.CompressionType & CompressionType.TYPE_QUANTUM) != 0) { - uint windowBits = (uint)(((ushort)folder.CompressionType >> 8) & 0x1f); - var decomp = SabreTools.Compression.Quantum.Decompressor.Create(db.CompressedData, windowBits); - byte[] data = decomp.Process(); + var quantum = SabreTools.Compression.Quantum.Decompressor.Create(db.CompressedData, quantumWindowBits); + byte[] data = quantum.Process(); ms.Write(data, 0, data.Length); ms.Flush(); }