Index: lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp |
diff --git a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp |
index 4bfe85ce6d13a672da0b022d61087166c6ab2d72..f555f9d8d49f4aff911af3cde3ea4fe302f49b85 100644 |
--- a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp |
+++ b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp |
@@ -1510,13 +1510,19 @@ std::error_code NaClBitcodeReader::ParseFunctionBody(Function *F) { |
"Incomplete case entry in SWITCH record"); |
uint64_t NumItems = Record[CurIdx++]; |
bool isSingleNumber = Record[CurIdx++]; |
- if (NumItems != 1 || !isSingleNumber) |
+ if (NumItems != 1 || !isSingleNumber) { |
+ delete SI; |
JF
2015/08/18 17:07:46
Can this file as well as upstream lib/Bitcode/Read
Karl
2015/08/19 19:39:00
Switches are not special. The code was written thi
|
return Error(InvalidRecord, |
"Case ranges are not supported in PNaCl bitcode"); |
+ } |
APInt CaseValue(ValueBitWidth, |
NaClDecodeSignRotatedValue(Record[CurIdx++])); |
BasicBlock *DestBB = getBasicBlock(Record[CurIdx++]); |
+ if (DestBB == nullptr) { |
+ delete SI; |
+ return Error(InvalidValue, "Invalid branch in SWITCH case"); |
+ } |
SI->addCase(ConstantInt::get(Context, CaseValue), DestBB); |
} |
I = SI; |