[PATCH] Relax an assert when there's a type mismatch in forward references

Rafael EspĂ­ndola rafael.espindola at gmail.com
Mon Apr 27 15:41:23 PDT 2015


LGTM

On 27 April 2015 at 18:34, Filipe Cabecinhas
<filcab+llvm.phabricator at gmail.com> wrote:
> Hi rafael,
>
> We don't seem to need to assert here, since this function's callers expect
> to get a nullptr on error. This way we don't assert on user input.
>
> Bug found with AFL fuzz.
>
> http://reviews.llvm.org/D9308
>
> Files:
>   lib/Bitcode/Reader/BitcodeReader.cpp
>   test/Bitcode/Inputs/invalid-fwdref-type-mismatch.bc
>   test/Bitcode/invalid.test
>
> Index: lib/Bitcode/Reader/BitcodeReader.cpp
> ===================================================================
> --- lib/Bitcode/Reader/BitcodeReader.cpp
> +++ lib/Bitcode/Reader/BitcodeReader.cpp
> @@ -794,7 +794,9 @@
>      resize(Idx + 1);
>
>    if (Value *V = ValuePtrs[Idx]) {
> -    assert((!Ty || Ty == V->getType()) && "Type mismatch in value table!");
> +    // If the types don't match, it's invalid.
> +    if (Ty && Ty != V->getType())
> +      return nullptr;
>      return V;
>    }
>
> Index: test/Bitcode/invalid.test
> ===================================================================
> --- test/Bitcode/invalid.test
> +++ test/Bitcode/invalid.test
> @@ -93,3 +93,8 @@
>  RUN:   FileCheck --check-prefix=INVALID-TYPE %s
>
>  INVALID-TYPE: Invalid type for value
> +
> +RUN: not llvm-dis -disable-output %p/Inputs/invalid-fwdref-type-mismatch.bc 2>&1 | \
> +RUN:   FileCheck --check-prefix=FWDREF-TYPE %s
> +
> +FWDREF-TYPE: Invalid record
>
> EMAIL PREFERENCES
>   http://reviews.llvm.org/settings/panel/emailpreferences/



More information about the llvm-commits mailing list