From d54c88a01d950dcc07811567b81f3caf6ce9a87d Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 28 Jul 2025 15:16:57 -0400 Subject: [PATCH] Don't use MemoryStream.ToArray --- BinaryObjectScanner/FileType/MicrosoftCAB.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/BinaryObjectScanner/FileType/MicrosoftCAB.cs b/BinaryObjectScanner/FileType/MicrosoftCAB.cs index 7b6d5912..de44e6f3 100644 --- a/BinaryObjectScanner/FileType/MicrosoftCAB.cs +++ b/BinaryObjectScanner/FileType/MicrosoftCAB.cs @@ -1,6 +1,8 @@ using System; using System.IO; using BinaryObjectScanner.Interfaces; +using SabreTools.IO.Extensions; + #if (NET40_OR_GREATER || NETCOREAPP) && WINX86 using LibMSPackN; #else @@ -45,8 +47,8 @@ namespace BinaryObjectScanner.FileType var folder = cabArchive.Model.Folders[f]; // Decompress the blocks, if possible - using var ms = DecompressBlocks(cabArchive, file, folder, f); - if (ms == null || ms.Length == 0) + using var blockStream = DecompressBlocks(cabArchive, file, folder, f); + if (blockStream == null || blockStream.Length == 0) continue; // Ensure files @@ -59,8 +61,8 @@ namespace BinaryObjectScanner.FileType { try { - byte[] fileData = new byte[compressedFile.FileSize]; - Array.Copy(ms.ToArray(), compressedFile.FolderStartOffset, fileData, 0, compressedFile.FileSize); + blockStream.Seek(compressedFile.FolderStartOffset, SeekOrigin.Begin); + byte[] fileData = blockStream.ReadBytes((int)compressedFile.FileSize); // Ensure directory separators are consistent string fileName = compressedFile.Name!; @@ -137,7 +139,7 @@ namespace BinaryObjectScanner.FileType /// /// Decompress all blocks for a folder /// - private MemoryStream? DecompressBlocks(SabreTools.Serialization.Wrappers.MicrosoftCabinet cabArchive, string file, CFFOLDER? folder, int folderIndex) + private Stream? DecompressBlocks(SabreTools.Serialization.Wrappers.MicrosoftCabinet cabArchive, string file, CFFOLDER? folder, int folderIndex) { // Ensure data blocks var dataBlocks = GetDataBlocks(cabArchive, file, folder, folderIndex);