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;