[COFFObjectFile] Ignore broken symbol table

When binaries are compressed by UPX, information about symbol table
offset and symbol count remain unchanged (but became invalid due to
compression).
This causes failure in the constructor and the rest of the binary cannot
be processed.

Instead, reset symbol related information (symbol/string table pointers,
sizes) - this should disable the related iterators and functions while
the rest of the binary can still be processed.

Patch by Bandzi Michal!

llvm-svn: 280147
This commit is contained in:
David Majnemer
2016-08-30 20:20:24 +00:00
parent 000b071b07
commit ac8cfab51f
2 changed files with 12 additions and 3 deletions

View File

@@ -729,8 +729,12 @@ COFFObjectFile::COFFObjectFile(MemoryBufferRef Object, std::error_code &EC)
// Initialize the pointer to the symbol table.
if (getPointerToSymbolTable() != 0) {
if ((EC = initSymbolTablePtr()))
return;
if ((EC = initSymbolTablePtr())) {
SymbolTable16 = nullptr;
SymbolTable32 = nullptr;
StringTable = nullptr;
StringTableSize = 0;
}
} else {
// We had better not have any symbols if we don't have a symbol table.
if (getNumberOfSymbols() != 0) {