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

Filipe Cabecinhas me at filcab.net
Fri Jun 5 12:09:11 PDT 2015


Makes sense. I'll do a follow up patch.

Thanks,
  Filipe

On Friday, June 5, 2015, Duncan P. N. Exon Smith <dexonsmith at apple.com>
wrote:

>
> > On 2015-Jun-02, at 18:30, Filipe Cabecinhas <me at filcab.net
> <javascript:;>> 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 <javascript:;>
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu <javascript:;>
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150605/d6beaad0/attachment.html>


More information about the llvm-commits mailing list