[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