summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff options
context:
space:
mode:
authorFilipe Cabecinhas <me@filcab.net>2015-04-29 01:27:01 +0000
committerFilipe Cabecinhas <me@filcab.net>2015-04-29 01:27:01 +0000
commitf15fb032efeb9da81f3ca341879b3eccea98b1b6 (patch)
tree83c5377aa61d7c3a6860ecc3674710d2bd9f3552 /llvm/lib/Bitcode/Reader/BitcodeReader.cpp
parent180b92168dd61c0d6c61eaa241c3c21bd892a19b (diff)
downloadbcm5719-llvm-f15fb032efeb9da81f3ca341879b3eccea98b1b6.tar.gz
bcm5719-llvm-f15fb032efeb9da81f3ca341879b3eccea98b1b6.zip
Make sure that isValidElementType(Type) before calling {Array,Struct}Type::get(Type)
Bug found with AFL fuzz. llvm-svn: 236073
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 6656478754e..a381c30170e 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -1474,7 +1474,8 @@ std::error_code BitcodeReader::ParseTypeTableBody() {
case bitc::TYPE_CODE_ARRAY: // ARRAY: [numelts, eltty]
if (Record.size() < 2)
return Error("Invalid record");
- if ((ResultTy = getTypeByID(Record[1])))
+ if ((ResultTy = getTypeByID(Record[1])) &&
+ StructType::isValidElementType(ResultTy))
ResultTy = ArrayType::get(ResultTy, Record[0]);
else
return Error("Invalid type");
@@ -1482,7 +1483,8 @@ std::error_code BitcodeReader::ParseTypeTableBody() {
case bitc::TYPE_CODE_VECTOR: // VECTOR: [numelts, eltty]
if (Record.size() < 2)
return Error("Invalid record");
- if ((ResultTy = getTypeByID(Record[1])))
+ if ((ResultTy = getTypeByID(Record[1])) &&
+ StructType::isValidElementType(ResultTy))
ResultTy = VectorType::get(ResultTy, Record[0]);
else
return Error("Invalid type");
OpenPOWER on IntegriCloud