mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-04-23 14:43:06 +00:00
Fix MS-ZIP decompression in MS-CAB
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user