dwarfdump: Add some error handling for DWP index sections of the wrong size
[oota-llvm.git] / lib / DebugInfo / DWARF / DWARFUnitIndex.cpp
index a050d82c295b9c9b7d08c094e5dfcc5247ad8bea..0bb786d7b724b33a17e0b6487a06483c7865ebbe 100644 (file)
@@ -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);