From 366e6ae1717caf1779f2d082de7a9433b88a9434 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 2 Dec 2024 11:34:08 -0500 Subject: [PATCH] Wrappers should never throw --- .../FileType/AACSMediaKeyBlock.cs | 30 +++++--------- BinaryObjectScanner/FileType/BDPlusSVM.cs | 23 +++-------- BinaryObjectScanner/FileType/BFPK.cs | 41 ++++++++----------- BinaryObjectScanner/FileType/BSP.cs | 31 +++++--------- BinaryObjectScanner/FileType/GCF.cs | 27 ++++-------- BinaryObjectScanner/FileType/PAK.cs | 27 ++++-------- BinaryObjectScanner/FileType/PFF.cs | 27 ++++-------- BinaryObjectScanner/FileType/Quantum.cs | 27 ++++-------- BinaryObjectScanner/FileType/SGA.cs | 27 ++++-------- BinaryObjectScanner/FileType/VBSP.cs | 31 +++++--------- BinaryObjectScanner/FileType/VPK.cs | 27 ++++-------- BinaryObjectScanner/FileType/WAD3.cs | 27 ++++-------- BinaryObjectScanner/FileType/XZP.cs | 27 ++++-------- 13 files changed, 126 insertions(+), 246 deletions(-) diff --git a/BinaryObjectScanner/FileType/AACSMediaKeyBlock.cs b/BinaryObjectScanner/FileType/AACSMediaKeyBlock.cs index 5390f221..f91bd949 100644 --- a/BinaryObjectScanner/FileType/AACSMediaKeyBlock.cs +++ b/BinaryObjectScanner/FileType/AACSMediaKeyBlock.cs @@ -22,27 +22,17 @@ namespace BinaryObjectScanner.FileType /// public string? Detect(Stream stream, string file, bool includeDebug) { - // If the MKB file itself fails - try - { - // Create the wrapper - var mkb = SabreTools.Serialization.Wrappers.AACSMediaKeyBlock.Create(stream); - if (mkb == null) - return null; + // Create the wrapper + var mkb = SabreTools.Serialization.Wrappers.AACSMediaKeyBlock.Create(stream); + if (mkb == null) + return null; - // Derive the version, if possible - var typeAndVersion = Array.Find(mkb.Records ?? [], r => r?.RecordType == SabreTools.Models.AACS.RecordType.TypeAndVersion); - if (typeAndVersion == null) - return "AACS (Unknown Version)"; - else - return $"AACS {(typeAndVersion as SabreTools.Models.AACS.TypeAndVersionRecord)?.VersionNumber}"; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); - } - - return null; + // Derive the version, if possible + var typeAndVersion = Array.Find(mkb.Records ?? [], r => r?.RecordType == SabreTools.Models.AACS.RecordType.TypeAndVersion); + if (typeAndVersion == null) + return "AACS (Unknown Version)"; + else + return $"AACS {(typeAndVersion as SabreTools.Models.AACS.TypeAndVersionRecord)?.VersionNumber}"; } } } diff --git a/BinaryObjectScanner/FileType/BDPlusSVM.cs b/BinaryObjectScanner/FileType/BDPlusSVM.cs index cbfd4b6b..009b198e 100644 --- a/BinaryObjectScanner/FileType/BDPlusSVM.cs +++ b/BinaryObjectScanner/FileType/BDPlusSVM.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,23 +21,13 @@ namespace BinaryObjectScanner.FileType /// public string? Detect(Stream stream, string file, bool includeDebug) { - // If the BD+ file itself fails - try - { - // Create the wrapper - var svm = SabreTools.Serialization.Wrappers.BDPlusSVM.Create(stream); - if (svm == null) - return null; + // Create the wrapper + var svm = SabreTools.Serialization.Wrappers.BDPlusSVM.Create(stream); + if (svm == null) + return null; - // Return the formatted value - return $"BD+ {svm.Date}"; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); - } - - return null; + // Return the formatted value + return $"BD+ {svm.Date}"; } } } diff --git a/BinaryObjectScanner/FileType/BFPK.cs b/BinaryObjectScanner/FileType/BFPK.cs index 5bab294a..09e6a735 100644 --- a/BinaryObjectScanner/FileType/BFPK.cs +++ b/BinaryObjectScanner/FileType/BFPK.cs @@ -1,5 +1,4 @@ -using System; -using System.IO; +using System.IO; using BinaryObjectScanner.Interfaces; #if NET462_OR_GREATER || NETCOREAPP using SharpCompress.Compressors; @@ -26,24 +25,16 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var bfpk = SabreTools.Serialization.Wrappers.BFPK.Create(stream); - if (bfpk == null) - return false; - - // Extract all files - Directory.CreateDirectory(outDir); - ExtractAll(bfpk, outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); + // Create the wrapper + var bfpk = SabreTools.Serialization.Wrappers.BFPK.Create(stream); + if (bfpk == null) return false; - } + + // Extract all files + Directory.CreateDirectory(outDir); + ExtractAll(bfpk, outDir); + + return true; } /// @@ -119,12 +110,12 @@ namespace BinaryObjectScanner.FileType fs.Write(data, 0, compressedSize); } #if NET462_OR_GREATER || NETCOREAPP - else - { - MemoryStream ms = new MemoryStream(data); - ZlibStream zs = new ZlibStream(ms, CompressionMode.Decompress); - zs.CopyTo(fs); - } + else + { + MemoryStream ms = new MemoryStream(data); + ZlibStream zs = new ZlibStream(ms, CompressionMode.Decompress); + zs.CopyTo(fs); + } #endif return true; diff --git a/BinaryObjectScanner/FileType/BSP.cs b/BinaryObjectScanner/FileType/BSP.cs index 8b62d565..eed89306 100644 --- a/BinaryObjectScanner/FileType/BSP.cs +++ b/BinaryObjectScanner/FileType/BSP.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,26 +21,18 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var bsp = SabreTools.Serialization.Wrappers.BSP.Create(stream); - if (bsp == null) - return false; - - // TODO: Introduce helper methods for all specialty lump types - - // Loop through and extract all files - Directory.CreateDirectory(outDir); - bsp.ExtractAllLumps(outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); + // Create the wrapper + var bsp = SabreTools.Serialization.Wrappers.BSP.Create(stream); + if (bsp == null) return false; - } + + // TODO: Introduce helper methods for all specialty lump types + + // Loop through and extract all files + Directory.CreateDirectory(outDir); + bsp.ExtractAllLumps(outDir); + + return true; } } } diff --git a/BinaryObjectScanner/FileType/GCF.cs b/BinaryObjectScanner/FileType/GCF.cs index 2c84ff5b..6ea1ee9e 100644 --- a/BinaryObjectScanner/FileType/GCF.cs +++ b/BinaryObjectScanner/FileType/GCF.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,24 +21,16 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var gcf = SabreTools.Serialization.Wrappers.GCF.Create(stream); - if (gcf == null) - return false; - - // Loop through and extract all files - Directory.CreateDirectory(outDir); - gcf.ExtractAll(outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); + // Create the wrapper + var gcf = SabreTools.Serialization.Wrappers.GCF.Create(stream); + if (gcf == null) return false; - } + + // Loop through and extract all files + Directory.CreateDirectory(outDir); + gcf.ExtractAll(outDir); + + return true; } } } diff --git a/BinaryObjectScanner/FileType/PAK.cs b/BinaryObjectScanner/FileType/PAK.cs index 6235f736..2614a52d 100644 --- a/BinaryObjectScanner/FileType/PAK.cs +++ b/BinaryObjectScanner/FileType/PAK.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,24 +21,16 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var pak = SabreTools.Serialization.Wrappers.PAK.Create(stream); - if (pak == null) - return false; - - // Loop through and extract all files - Directory.CreateDirectory(outDir); - pak.ExtractAll(outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); + // Create the wrapper + var pak = SabreTools.Serialization.Wrappers.PAK.Create(stream); + if (pak == null) return false; - } + + // Loop through and extract all files + Directory.CreateDirectory(outDir); + pak.ExtractAll(outDir); + + return true; } } } diff --git a/BinaryObjectScanner/FileType/PFF.cs b/BinaryObjectScanner/FileType/PFF.cs index ba6d6956..2ef57a61 100644 --- a/BinaryObjectScanner/FileType/PFF.cs +++ b/BinaryObjectScanner/FileType/PFF.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,24 +21,16 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var pff = SabreTools.Serialization.Wrappers.PFF.Create(stream); - if (pff == null) - return false; - - // Extract all files - Directory.CreateDirectory(outDir); - pff.ExtractAll(outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex.Message); + // Create the wrapper + var pff = SabreTools.Serialization.Wrappers.PFF.Create(stream); + if (pff == null) return false; - } + + // Extract all files + Directory.CreateDirectory(outDir); + pff.ExtractAll(outDir); + + return true; } } } diff --git a/BinaryObjectScanner/FileType/Quantum.cs b/BinaryObjectScanner/FileType/Quantum.cs index 27251fbd..4033d157 100644 --- a/BinaryObjectScanner/FileType/Quantum.cs +++ b/BinaryObjectScanner/FileType/Quantum.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,24 +21,16 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var quantum = SabreTools.Serialization.Wrappers.Quantum.Create(stream); - if (quantum == null) - return false; - - // Extract all files - Directory.CreateDirectory(outDir); - ExtractAll(quantum, outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex.Message); + // Create the wrapper + var quantum = SabreTools.Serialization.Wrappers.Quantum.Create(stream); + if (quantum == null) return false; - } + + // Extract all files + Directory.CreateDirectory(outDir); + ExtractAll(quantum, outDir); + + return true; } /// diff --git a/BinaryObjectScanner/FileType/SGA.cs b/BinaryObjectScanner/FileType/SGA.cs index 20d86df4..f8790bf3 100644 --- a/BinaryObjectScanner/FileType/SGA.cs +++ b/BinaryObjectScanner/FileType/SGA.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.IO; using BinaryObjectScanner.Interfaces; @@ -24,24 +23,16 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var sga = SabreTools.Serialization.Wrappers.SGA.Create(stream); - if (sga == null) - return false; - - // Loop through and extract all files - Directory.CreateDirectory(outDir); - ExtractAll(sga, outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); + // Create the wrapper + var sga = SabreTools.Serialization.Wrappers.SGA.Create(stream); + if (sga == null) return false; - } + + // Loop through and extract all files + Directory.CreateDirectory(outDir); + ExtractAll(sga, outDir); + + return true; } /// diff --git a/BinaryObjectScanner/FileType/VBSP.cs b/BinaryObjectScanner/FileType/VBSP.cs index c117020f..b7f1fed2 100644 --- a/BinaryObjectScanner/FileType/VBSP.cs +++ b/BinaryObjectScanner/FileType/VBSP.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,26 +21,18 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var vbsp = SabreTools.Serialization.Wrappers.VBSP.Create(stream); - if (vbsp == null) - return false; - - // TODO: Introduce helper methods for all specialty lump types - - // Loop through and extract all files - Directory.CreateDirectory(outDir); - vbsp.ExtractAllLumps(outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex.ToString()); + // Create the wrapper + var vbsp = SabreTools.Serialization.Wrappers.VBSP.Create(stream); + if (vbsp == null) return false; - } + + // TODO: Introduce helper methods for all specialty lump types + + // Loop through and extract all files + Directory.CreateDirectory(outDir); + vbsp.ExtractAllLumps(outDir); + + return true; } } } diff --git a/BinaryObjectScanner/FileType/VPK.cs b/BinaryObjectScanner/FileType/VPK.cs index 1b7b9d17..7262c55c 100644 --- a/BinaryObjectScanner/FileType/VPK.cs +++ b/BinaryObjectScanner/FileType/VPK.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,24 +21,16 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var vpk = SabreTools.Serialization.Wrappers.VPK.Create(stream); - if (vpk == null) - return false; - - // Loop through and extract all files - Directory.CreateDirectory(outDir); - vpk.ExtractAll(outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); + // Create the wrapper + var vpk = SabreTools.Serialization.Wrappers.VPK.Create(stream); + if (vpk == null) return false; - } + + // Loop through and extract all files + Directory.CreateDirectory(outDir); + vpk.ExtractAll(outDir); + + return true; } } } diff --git a/BinaryObjectScanner/FileType/WAD3.cs b/BinaryObjectScanner/FileType/WAD3.cs index 18d0abb5..d31eb2f5 100644 --- a/BinaryObjectScanner/FileType/WAD3.cs +++ b/BinaryObjectScanner/FileType/WAD3.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,24 +21,16 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var wad = SabreTools.Serialization.Wrappers.WAD3.Create(stream); - if (wad == null) - return false; - - // Loop through and extract all files - Directory.CreateDirectory(outDir); - wad.ExtractAllLumps(outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); + // Create the wrapper + var wad = SabreTools.Serialization.Wrappers.WAD3.Create(stream); + if (wad == null) return false; - } + + // Loop through and extract all files + Directory.CreateDirectory(outDir); + wad.ExtractAllLumps(outDir); + + return true; } } } diff --git a/BinaryObjectScanner/FileType/XZP.cs b/BinaryObjectScanner/FileType/XZP.cs index bda2d09f..6b91ea2b 100644 --- a/BinaryObjectScanner/FileType/XZP.cs +++ b/BinaryObjectScanner/FileType/XZP.cs @@ -1,4 +1,3 @@ -using System; using System.IO; using BinaryObjectScanner.Interfaces; @@ -22,24 +21,16 @@ namespace BinaryObjectScanner.FileType /// public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { - try - { - // Create the wrapper - var xzp = SabreTools.Serialization.Wrappers.XZP.Create(stream); - if (xzp == null) - return false; - - // Loop through and extract all files - Directory.CreateDirectory(outDir); - xzp.ExtractAll(outDir); - - return true; - } - catch (Exception ex) - { - if (includeDebug) Console.WriteLine(ex); + // Create the wrapper + var xzp = SabreTools.Serialization.Wrappers.XZP.Create(stream); + if (xzp == null) return false; - } + + // Loop through and extract all files + Directory.CreateDirectory(outDir); + xzp.ExtractAll(outDir); + + return true; } } }