summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2015-11-12 01:41:59 +0000
committerDavid Blaikie <dblaikie@gmail.com>2015-11-12 01:41:59 +0000
commit6e9c4f7f0da160c94a1e9ac6cc5e083eae9f1b0d (patch)
tree832708a11fa7c3a39755ae4fa76e27116a80c5fe
parent5b9bf49c6f6d6016c912719a035e527f56c3a3c3 (diff)
downloadbcm5719-llvm-6e9c4f7f0da160c94a1e9ac6cc5e083eae9f1b0d.tar.gz
bcm5719-llvm-6e9c4f7f0da160c94a1e9ac6cc5e083eae9f1b0d.zip
dwarfdump: Add some error handling for DWP index sections of the wrong size
llvm-svn: 252843
-rw-r--r--llvm/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp b/llvm/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp
index a050d82c295..0bb786d7b72 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp
@@ -16,6 +16,8 @@ namespace llvm {
bool DWARFUnitIndex::Header::parse(DataExtractor IndexData,
uint32_t *OffsetPtr) {
+ if (!IndexData.isValidOffsetForDataOfSize(*OffsetPtr, 16))
+ return false;
Version = IndexData.getU32(OffsetPtr);
NumColumns = IndexData.getU32(OffsetPtr);
NumUnits = IndexData.getU32(OffsetPtr);
@@ -32,6 +34,11 @@ bool DWARFUnitIndex::parse(DataExtractor IndexData) {
if (!Header.parse(IndexData, &Offset))
return false;
+ if (!IndexData.isValidOffsetForDataOfSize(
+ Offset, Header.NumBuckets * (8 + 4) +
+ (2 * Header.NumUnits + 1) * 4 * Header.NumColumns))
+ return false;
+
Rows = llvm::make_unique<HashRow[]>(Header.NumBuckets);
auto Contribs =
llvm::make_unique<HashRow::SectionContribution *[]>(Header.NumUnits);
OpenPOWER on IntegriCloud