[llvm] r202292 - Relax COFF string table check
Nico Rieck
nico.rieck at gmail.com
Wed Feb 26 11:51:45 PST 2014
Author: nrieck
Date: Wed Feb 26 13:51:44 2014
New Revision: 202292
URL: http://llvm.org/viewvc/llvm-project?rev=202292&view=rev
Log:
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.
Added:
llvm/trunk/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386
llvm/trunk/test/tools/llvm-readobj/coff-zero-string-table.test
Modified:
llvm/trunk/lib/Object/COFFObjectFile.cpp
Modified: llvm/trunk/lib/Object/COFFObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFObjectFile.cpp?rev=202292&r1=202291&r2=202292&view=diff
==============================================================================
--- llvm/trunk/lib/Object/COFFObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/COFFObjectFile.cpp Wed Feb 26 13:51:44 2014
@@ -409,9 +409,13 @@ error_code COFFObjectFile::initSymbolTab
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;
}
Added: llvm/trunk/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386?rev=202292&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386 (added) and llvm/trunk/test/tools/llvm-readobj/Inputs/zero-string-table.obj.coff-i386 Wed Feb 26 13:51:44 2014 differ
Added: llvm/trunk/test/tools/llvm-readobj/coff-zero-string-table.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/coff-zero-string-table.test?rev=202292&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/coff-zero-string-table.test (added)
+++ llvm/trunk/test/tools/llvm-readobj/coff-zero-string-table.test Wed Feb 26 13:51:44 2014
@@ -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
More information about the llvm-commits
mailing list