diff options
| -rw-r--r-- | llvm/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp | 7 |
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); |

