From adf96270456f26e0ddc9ed915ea844ff920f0e46 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sun, 17 Aug 2025 15:25:25 -0400 Subject: [PATCH] Stricter with COFF tables --- .../Deserializers/PortableExecutable.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/SabreTools.Serialization/Deserializers/PortableExecutable.cs b/SabreTools.Serialization/Deserializers/PortableExecutable.cs index b5bb5ec4..906511dc 100644 --- a/SabreTools.Serialization/Deserializers/PortableExecutable.cs +++ b/SabreTools.Serialization/Deserializers/PortableExecutable.cs @@ -99,7 +99,8 @@ namespace SabreTools.Serialization.Deserializers executable.COFFSymbolTable = ParseCOFFSymbolTable(data, coffFileHeader.NumberOfSymbols); // Set the COFF string table - executable.COFFStringTable = ParseCOFFStringTable(data); + if (executable.COFFSymbolTable != null) + executable.COFFStringTable = ParseCOFFStringTable(data); } #endregion @@ -400,7 +401,7 @@ namespace SabreTools.Serialization.Deserializers /// Stream to parse /// Number of COFF symbol table entries to read /// Filled COFF symbol table on success, null on error - public static COFFSymbolTableEntry[] ParseCOFFSymbolTable(Stream data, uint count) + public static COFFSymbolTableEntry[]? ParseCOFFSymbolTable(Stream data, uint count) { var coffSymbolTable = new COFFSymbolTableEntry[count]; @@ -468,6 +469,10 @@ namespace SabreTools.Serialization.Deserializers { currentSymbolType = 6; } + else + { + return null; + } } // Auxiliary Format 1: Function Definitions @@ -543,6 +548,12 @@ namespace SabreTools.Serialization.Deserializers auxSymbolsRemaining--; } + // Invalid case, should never happen + else + { + return null; + } + // If we hit the last aux symbol, go back to normal format if (auxSymbolsRemaining == 0) currentSymbolType = 0;