Chromium Code Reviews| 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; |