diff options
| -rw-r--r-- | llvm/lib/Object/COFFObjectFile.cpp | 8 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386 | bin | 0 -> 704 bytes | |||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/coff-zero-string-table.test | 8 | 
3 files changed, 14 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;  } diff --git a/llvm/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386 b/llvm/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386 Binary files differnew file mode 100644 index 00000000000..f41f224f609 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386 diff --git a/llvm/test/tools/llvm-readobj/coff-zero-string-table.test b/llvm/test/tools/llvm-readobj/coff-zero-string-table.test new file mode 100644 index 00000000000..dfcf79e2477 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/coff-zero-string-table.test @@ -0,0 +1,8 @@ +Ensure that we can read COFF objects with a string table size of 0 (instead +of 4) for empty string tables. + +RUN: llvm-readobj -t %p/Inputs/zero-string-table.obj.coff-i386 | FileCheck %s + +CHECK: Symbols [ +CHECK:   Symbol { +CHECK:     Name: $R000000  | 

