From 650115f722a9a5bcee7216138d96539f930b5063 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 25 Mar 2024 15:00:42 -0400 Subject: [PATCH] Replace SharpZipLib with ST.Compression --- .../BinaryObjectScanner.csproj | 1 - BinaryObjectScanner/FileType/SGA.cs | 24 +++++++++-------- BinaryObjectScanner/Packer/CExe.cs | 27 ++++++++++++------- 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/BinaryObjectScanner/BinaryObjectScanner.csproj b/BinaryObjectScanner/BinaryObjectScanner.csproj index 6df67aa1..e72638b8 100644 --- a/BinaryObjectScanner/BinaryObjectScanner.csproj +++ b/BinaryObjectScanner/BinaryObjectScanner.csproj @@ -75,7 +75,6 @@ - diff --git a/BinaryObjectScanner/FileType/SGA.cs b/BinaryObjectScanner/FileType/SGA.cs index b7e07218..53b6bcbd 100644 --- a/BinaryObjectScanner/FileType/SGA.cs +++ b/BinaryObjectScanner/FileType/SGA.cs @@ -3,9 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using BinaryObjectScanner.Interfaces; -#if NET462_OR_GREATER || NETCOREAPP -using ICSharpCode.SharpZipLib.Zip.Compression; -#endif +using SabreTools.Compression.zlib; namespace BinaryObjectScanner.FileType { @@ -230,15 +228,19 @@ namespace BinaryObjectScanner.FileType } else { - // Decompress the data -#if NET462_OR_GREATER || NETCOREAPP + // Inflate the data into the buffer + var zstream = new ZLib.z_stream_s(); data = new byte[outputFileSize]; - Inflater inflater = new Inflater(); - inflater.SetInput(compressedData); - inflater.Inflate(data); -#else - data = new byte[outputFileSize]; -#endif + unsafe + { + fixed (byte* payloadPtr = compressedData) + fixed (byte* dataPtr = data) + { + zstream.next_in = payloadPtr; + zstream.next_out = dataPtr; + int zret = ZLib.inflate(zstream, 1); + } + } } // If we have an invalid output directory diff --git a/BinaryObjectScanner/Packer/CExe.cs b/BinaryObjectScanner/Packer/CExe.cs index 29994760..a0dec522 100644 --- a/BinaryObjectScanner/Packer/CExe.cs +++ b/BinaryObjectScanner/Packer/CExe.cs @@ -3,9 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using BinaryObjectScanner.Interfaces; -#if NET462_OR_GREATER || NETCOREAPP -using ICSharpCode.SharpZipLib.Zip.Compression; -#endif +using SabreTools.Compression.zlib; using SabreTools.Matching; using SabreTools.Serialization.Wrappers; @@ -88,16 +86,27 @@ namespace BinaryObjectScanner.Packer try { // Inflate the data into the buffer -#if NET462_OR_GREATER || NETCOREAPP - Inflater inflater = new Inflater(); - inflater.SetInput(payload); + var zstream = new ZLib.z_stream_s(); data = new byte[payload.Length * 4]; - int read = inflater.Inflate(data); + unsafe + { + fixed (byte* payloadPtr = payload) + fixed (byte* dataPtr = data) + { + zstream.next_in = payloadPtr; + zstream.next_out = dataPtr; + int zret = ZLib.inflate(zstream, 1); + } + } // Trim the buffer to the proper size - data = new ReadOnlySpan(data, 0, read).ToArray(); + uint read = zstream.total_out; +#if NET462_OR_GREATER || NETCOREAPP + data = new ReadOnlySpan(data, 0, (int)read).ToArray(); #else - data = null; + var temp = new byte[read]; + Array.Copy(data, 0, temp, 0, read); + data = temp; #endif } catch