From 6f84d31540e2c34faea5f98aec0d63fc9500590e Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Tue, 11 Feb 2014 21:22:53 +0000 Subject: [PATCH] make llvm-dwarfdump a little more resilient when parsing .debug_loc sections. The call to data.getUnsigned(&Offset, AddressSize) only increments Offset if the read succeeds, which will result in an infinite loop. llvm-svn: 201179 --- llvm/lib/DebugInfo/DWARFDebugLoc.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/llvm/lib/DebugInfo/DWARFDebugLoc.cpp b/llvm/lib/DebugInfo/DWARFDebugLoc.cpp index 3895ffa8d7a7..36d17919dea8 100644 --- a/llvm/lib/DebugInfo/DWARFDebugLoc.cpp +++ b/llvm/lib/DebugInfo/DWARFDebugLoc.cpp @@ -36,7 +36,7 @@ void DWARFDebugLoc::dump(raw_ostream &OS) const { void DWARFDebugLoc::parse(DataExtractor data, unsigned AddressSize) { uint32_t Offset = 0; - while (data.isValidOffset(Offset)) { + while (data.isValidOffset(Offset+AddressSize-1)) { Locations.resize(Locations.size() + 1); LocationList &Loc = Locations.back(); Loc.Offset = Offset; @@ -71,4 +71,6 @@ void DWARFDebugLoc::parse(DataExtractor data, unsigned AddressSize) { Loc.Entries.push_back(llvm_move(E)); } } + if (data.isValidOffset(Offset)) + llvm::errs() << "error: failed to consume entire .debug_loc section\n"; }