summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFilipe Cabecinhas <me@filcab.net>2015-06-03 01:30:13 +0000
committerFilipe Cabecinhas <me@filcab.net>2015-06-03 01:30:13 +0000
commitda86b6d409edd7af98a42dad65f33e5e49e43115 (patch)
tree5634eef65522be54ed00283eafa63b43c01a7a15
parent7b3995885d4ac1dfc1a3c67fc651ad00a1611f19 (diff)
downloadbcm5719-llvm-da86b6d409edd7af98a42dad65f33e5e49e43115.tar.gz
bcm5719-llvm-da86b6d409edd7af98a42dad65f33e5e49e43115.zip
[BitcodeReader] Diagnose type mismatches with aliases
Bug found with AFL fuzz. llvm-svn: 238895
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp9
-rw-r--r--llvm/test/Bitcode/Inputs/invalid-alias-type-mismatch.bcbin0 -> 452 bytes
-rw-r--r--llvm/test/Bitcode/invalid.test5
3 files changed, 11 insertions, 3 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 9e5e46aae0b..75b3b9fd73c 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/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<Constant>(ValueList[ValID]))
- AliasInitWorklist.back().first->setAliasee(C);
- else
+ if (Constant *C = dyn_cast_or_null<Constant>(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/llvm/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc b/llvm/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc
new file mode 100644
index 00000000000..5c429894480
--- /dev/null
+++ b/llvm/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc
Binary files differ
diff --git a/llvm/test/Bitcode/invalid.test b/llvm/test/Bitcode/invalid.test
index b120047e451..0aab553bb61 100644
--- a/llvm/test/Bitcode/invalid.test
+++ b/llvm/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
OpenPOWER on IntegriCloud