summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h b/llvm/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h
index f9184895d8d..6d260900257 100644
--- a/llvm/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h
+++ b/llvm/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h
@@ -97,7 +97,7 @@ public:
void visitTypeBegin(TypeLeafKind Leaf, ArrayRef<uint8_t> RecordData) {}
void visitTypeEnd(TypeLeafKind Leaf, ArrayRef<uint8_t> RecordData) {}
- static ArrayRef<uint8_t> skipPadding(ArrayRef<uint8_t> Data) {
+ ArrayRef<uint8_t> skipPadding(ArrayRef<uint8_t> Data) {
if (Data.empty())
return Data;
uint8_t Leaf = Data.front();
@@ -105,7 +105,12 @@ public:
return Data;
// Leaf is greater than 0xf0. We should advance by the number of bytes in
// the low 4 bits.
- return Data.drop_front(Leaf & 0x0F);
+ unsigned BytesToAdvance = Leaf & 0x0F;
+ if (Data.size() < BytesToAdvance) {
+ parseError();
+ return None;
+ }
+ return Data.drop_front(BytesToAdvance);
}
/// Visits individual member records of a field list record. Member records do
@@ -137,6 +142,8 @@ public:
#include "TypeRecords.def"
}
FieldData = skipPadding(FieldData);
+ if (hadError())
+ break;
}
}
OpenPOWER on IntegriCloud