summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
authorPetr Hosek <phosek@chromium.org>2017-04-25 18:56:33 +0000
committerPetr Hosek <phosek@chromium.org>2017-04-25 18:56:33 +0000
commit86611a078f1d9d16caf1951b22763fa322dcce73 (patch)
tree758c7b72dffe724393b9b8e3940f5df4d0a16390 /llvm/tools/llvm-objdump/llvm-objdump.cpp
parent9ebbe5bf2ed32001ce3fbdcabc3d3a6a2ffa5f93 (diff)
downloadbcm5719-llvm-86611a078f1d9d16caf1951b22763fa322dcce73.tar.gz
bcm5719-llvm-86611a078f1d9d16caf1951b22763fa322dcce73.zip
[llvm-objdump] Don't attempt to print lines beyond the end of file
This may trigger a segfault in llvm-objdump when the line number stored in debug infromation points beyond the end of file; lines in LineBuffer are stored in std::vector which is allocated in chunks, so even if the debug info points beyond the end of the file, this doesn't necessarily trigger the segfault unless the line number points beyond the allocated space. Differential Revision: https://reviews.llvm.org/D32466 llvm-svn: 301347
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 613d0643b43..18fa0e07408 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -485,10 +485,13 @@ void SourcePrinter::printSourceLine(raw_ostream &OS, uint64_t Address,
auto FileBuffer = SourceCache.find(LineInfo.FileName);
if (FileBuffer != SourceCache.end()) {
auto LineBuffer = LineCache.find(LineInfo.FileName);
- if (LineBuffer != LineCache.end())
+ if (LineBuffer != LineCache.end()) {
+ if (LineInfo.Line > LineBuffer->second.size())
+ return;
// Vector begins at 0, line numbers are non-zero
OS << Delimiter << LineBuffer->second[LineInfo.Line - 1].ltrim()
<< "\n";
+ }
}
}
OldLineInfo = LineInfo;
OpenPOWER on IntegriCloud