[llvm] r238895 - [BitcodeReader] Diagnose type mismatches with aliases

Duncan P. N. Exon Smith dexonsmith at apple.com
Fri Jun 5 10:38:23 PDT 2015


> On 2015-Jun-02, at 18:30, Filipe Cabecinhas <me at filcab.net> wrote:
> 
> 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");

There's enough logic in there now, do you think it's worth flipping the
if for an else after the return?

    Constant *C = ...;
    if (!C)
      return Error(...);
    GlobalAlias *Alias = ...;
    if (...)
      return Error(...);
    Alias->setAliasee(C);

(At least, I find that easier to follow.)

>     }
>     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
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list