From: Nico Rieck Date: Wed, 26 Feb 2014 19:51:44 +0000 (+0000) Subject: Relax COFF string table check X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0a91f4830848ca16bf4b0569e45e23d7e8043368;p=oota-llvm.git 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202292 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Object/COFFObjectFile.cpp b/lib/Object/COFFObjectFile.cpp index 41d21eed139..0c79506f419 100644 --- a/lib/Object/COFFObjectFile.cpp +++ b/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/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386 b/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386 new file mode 100644 index 00000000000..f41f224f609 Binary files /dev/null and b/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386 differ diff --git a/test/tools/llvm-readobj/coff-zero-string-table.test b/test/tools/llvm-readobj/coff-zero-string-table.test new file mode 100644 index 00000000000..dfcf79e2477 --- /dev/null +++ b/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