dwarfdump: Add some error handling for DWP index sections of the wrong size
authorDavid Blaikie <dblaikie@gmail.com>
Thu, 12 Nov 2015 01:41:59 +0000 (01:41 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Thu, 12 Nov 2015 01:41:59 +0000 (01:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252843 91177308-0d34-0410-b5e6-96231b3b80d8

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);