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;