From 893c646938e906a20d8418f60f15a73257921c05 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 5 Sep 2018 18:01:04 +0000 Subject: [PATCH] Handle zero-length debug directory entries. Part of https://reviews.llvm.org/D51652 (tests will be in the lld repo) llvm-svn: 341485 --- llvm/lib/Object/COFFObjectFile.cpp | 10 ++++++---- llvm/tools/llvm-readobj/COFFDumper.cpp | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp index dfb95ed..f094013 100644 --- a/llvm/lib/Object/COFFObjectFile.cpp +++ b/llvm/lib/Object/COFFObjectFile.cpp @@ -616,6 +616,8 @@ std::error_code COFFObjectFile::initBaseRelocPtr() { IntPtr); BaseRelocEnd = reinterpret_cast( IntPtr + DataEntry->Size); + // FIXME: Verify the section containing BaseRelocHeader has at least + // DataEntry->Size bytes after DataEntry->RelativeVirtualAddress. return std::error_code(); } @@ -637,10 +639,10 @@ std::error_code COFFObjectFile::initDebugDirectoryPtr() { if (std::error_code EC = getRvaPtr(DataEntry->RelativeVirtualAddress, IntPtr)) return EC; DebugDirectoryBegin = reinterpret_cast(IntPtr); - if (std::error_code EC = getRvaPtr( - DataEntry->RelativeVirtualAddress + DataEntry->Size, IntPtr)) - return EC; - DebugDirectoryEnd = reinterpret_cast(IntPtr); + DebugDirectoryEnd = reinterpret_cast( + IntPtr + DataEntry->Size); + // FIXME: Verify the section containing DebugDirectoryBegin has at least + // DataEntry->Size bytes after DataEntry->RelativeVirtualAddress. return std::error_code(); } diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp index c0579d6..4b6125e 100644 --- a/llvm/tools/llvm-readobj/COFFDumper.cpp +++ b/llvm/tools/llvm-readobj/COFFDumper.cpp @@ -751,7 +751,7 @@ void COFFDumper::printCOFFDebugDirectory() { W.printNumber("PDBAge", DebugInfo->PDB70.Age); W.printString("PDBFileName", PDBFileName); } - } else { + } else if (D.SizeOfData != 0) { // FIXME: Type values of 12 and 13 are commonly observed but are not in // the documented type enum. Figure out what they mean. ArrayRef RawData; -- 2.7.4