From: Filipe Cabecinhas Date: Wed, 3 Jun 2015 01:30:13 +0000 (+0000) Subject: [BitcodeReader] Diagnose type mismatches with aliases X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a3a2cab504a693ad926e93696ae9cadafba460ca;p=oota-llvm.git [BitcodeReader] Diagnose type mismatches with aliases Bug found with AFL fuzz. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238895 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 9e5e46aae0b..75b3b9fd73c 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2065,9 +2065,12 @@ std::error_code BitcodeReader::ResolveGlobalAndAliasInits() { if (ValID >= ValueList.size()) { AliasInits.push_back(AliasInitWorklist.back()); } else { - if (Constant *C = dyn_cast_or_null(ValueList[ValID])) - AliasInitWorklist.back().first->setAliasee(C); - else + if (Constant *C = dyn_cast_or_null(ValueList[ValID])) { + GlobalAlias *Alias = AliasInitWorklist.back().first; + if (C->getType() != Alias->getType()) + return Error("Alias and aliasee types don't match"); + Alias->setAliasee(C); + } else return Error("Expected a constant"); } AliasInitWorklist.pop_back(); diff --git a/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc b/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc new file mode 100644 index 00000000000..5c429894480 Binary files /dev/null and b/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc differ diff --git a/test/Bitcode/invalid.test b/test/Bitcode/invalid.test index b120047e451..0aab553bb61 100644 --- a/test/Bitcode/invalid.test +++ b/test/Bitcode/invalid.test @@ -197,3 +197,8 @@ RUN: not llvm-dis -disable-output %p/Inputs/invalid-vector-length.bc 2>&1 | \ RUN: FileCheck --check-prefix=VECTOR-LENGTH %s VECTOR-LENGTH: Invalid vector length + +RUN: not llvm-dis -disable-output %p/Inputs/invalid-alias-type-mismatch.bc 2>&1 | \ +RUN: FileCheck --check-prefix=ALIAS-TYPE-MISMATCH %s + +ALIAS-TYPE-MISMATCH: Alias and aliasee types don't match