diff options
| author | Nico Rieck <nico.rieck@gmail.com> | 2014-02-26 19:51:44 +0000 | 
|---|---|---|
| committer | Nico Rieck <nico.rieck@gmail.com> | 2014-02-26 19:51:44 +0000 | 
| commit | 773a57958ca2aecc631f9e0ffebe4e6ec194bb5b (patch) | |
| tree | 673d4602fe29b720437529978775c4375504a31f /llvm/lib | |
| parent | 5645b363062392d0a84f508026d27c8bea76d994 (diff) | |
| download | bcm5719-llvm-773a57958ca2aecc631f9e0ffebe4e6ec194bb5b.tar.gz bcm5719-llvm-773a57958ca2aecc631f9e0ffebe4e6ec194bb5b.zip  | |
Relax COFF string table check
COFF object files with 0 as string table size are currently rejected. This
prevents us from reading object files written by tools like cvtres that
violate the PECOFF spec and write 0 instead of 4 for the size of an empty
string table.
llvm-svn: 202292
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Object/COFFObjectFile.cpp | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp index 41d21eed139..0c79506f419 100644 --- a/llvm/lib/Object/COFFObjectFile.cpp +++ b/llvm/lib/Object/COFFObjectFile.cpp @@ -409,9 +409,13 @@ error_code COFFObjectFile::initSymbolTablePtr() {        getObject(StringTable, Data, StringTableAddr, StringTableSize))      return EC; +  // Treat table sizes < 4 as empty because contrary to the PECOFF spec, some +  // tools like cvtres write a size of 0 for an empty table instead of 4. +  if (StringTableSize < 4) +      StringTableSize = 4; +    // Check that the string table is null terminated if has any in it. -  if (StringTableSize < 4 || -      (StringTableSize > 4 && StringTable[StringTableSize - 1] != 0)) +  if (StringTableSize > 4 && StringTable[StringTableSize - 1] != 0)      return  object_error::parse_failed;    return object_error::success;  }  | 

