[llvm] r278066 - Do not ignore SizeOfOptionalHeader in COFF header even if PE header is not present.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 8 15:54:22 PDT 2016


Author: ruiu
Date: Mon Aug  8 17:54:22 2016
New Revision: 278066

URL: http://llvm.org/viewvc/llvm-project?rev=278066&view=rev
Log:
Do not ignore SizeOfOptionalHeader in COFF header even if PE header is not present.

Attribute SizeOfOptionalHeader is ignored if no PE header is present
in the file. This attribute should be ignored according to standard,
however there are uses of this field even though it should not be used.

This change does not conform to PE/COFF standard, but there are several
COFF files without PE header, where you had to add up SizeOfOptionalHeader
in order to get proper section headers. Other tools and their own parsers
do take this into account.

Patch by Marek Milkovič!

https://reviews.llvm.org/D22750

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=278066&r1=278065&r2=278066&view=diff
==============================================================================
--- llvm/trunk/lib/Object/COFFObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/COFFObjectFile.cpp Mon Aug  8 17:54:22 2016
@@ -716,9 +716,10 @@ COFFObjectFile::COFFObjectFile(MemoryBuf
     }
     if ((EC = getObject(DataDirectory, Data, DataDirAddr, DataDirSize)))
       return;
-    CurPtr += COFFHeader->SizeOfOptionalHeader;
   }
 
+  CurPtr += COFFHeader->SizeOfOptionalHeader;
+
   if ((EC = getObject(SectionTable, Data, base() + CurPtr,
                       (uint64_t)getNumberOfSections() * sizeof(coff_section))))
     return;




More information about the llvm-commits mailing list