[llvm] r238895 - [BitcodeReader] Diagnose type mismatches with aliases
Filipe Cabecinhas
me at filcab.net
Tue Jun 2 18:30:13 PDT 2015
Author: filcab
Date: Tue Jun 2 20:30:13 2015
New Revision: 238895
URL: http://llvm.org/viewvc/llvm-project?rev=238895&view=rev
Log:
[BitcodeReader] Diagnose type mismatches with aliases
Bug found with AFL fuzz.
Added:
llvm/trunk/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc
Modified:
llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
llvm/trunk/test/Bitcode/invalid.test
Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=238895&r1=238894&r2=238895&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Tue Jun 2 20:30:13 2015
@@ -2065,9 +2065,12 @@ std::error_code BitcodeReader::ResolveGl
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();
Added: llvm/trunk/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc?rev=238895&view=auto
==============================================================================
Binary files llvm/trunk/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc (added) and llvm/trunk/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc Tue Jun 2 20:30:13 2015 differ
Modified: llvm/trunk/test/Bitcode/invalid.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/invalid.test?rev=238895&r1=238894&r2=238895&view=diff
==============================================================================
--- llvm/trunk/test/Bitcode/invalid.test (original)
+++ llvm/trunk/test/Bitcode/invalid.test Tue Jun 2 20:30:13 2015
@@ -197,3 +197,8 @@ RUN: not llvm-dis -disable-output %p/Inp
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
More information about the llvm-commits
mailing list