[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