Verify sizes when trying to read a VBR
[oota-llvm.git] / lib / Bitcode / Reader / BitstreamReader.cpp
index beaaf7a7d6673d27c681161ba5c38c63167e9e60..6e3bea1e87bc6aba35a681c2058c55dc43bf1337 100644 (file)
@@ -62,6 +62,8 @@ static uint64_t readAbbreviatedField(BitstreamCursor &Cursor,
   case BitCodeAbbrevOp::Fixed:
     return Cursor.Read((unsigned)Op.getEncodingData());
   case BitCodeAbbrevOp::VBR:
+    if ((unsigned)Op.getEncodingData() > 64)
+      report_fatal_error("Invalid record");
     return Cursor.ReadVBR64((unsigned)Op.getEncodingData());
   case BitCodeAbbrevOp::Char6:
     return BitCodeAbbrevOp::DecodeChar6(Cursor.Read(6));