From ff1f0398f135b77295769c41568f6edb5f3ed95a Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Fri, 27 May 2016 18:49:58 +0000 Subject: [PATCH] Don't assume that there will be enough padding bytes git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271030 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/DebugInfo/CodeView/CVTypeVisitor.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h b/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h index f9184895d8d..6d260900257 100644 --- a/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h +++ b/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h @@ -97,7 +97,7 @@ public: void visitTypeBegin(TypeLeafKind Leaf, ArrayRef RecordData) {} void visitTypeEnd(TypeLeafKind Leaf, ArrayRef RecordData) {} - static ArrayRef skipPadding(ArrayRef Data) { + ArrayRef skipPadding(ArrayRef 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; } } -- 2.11.0