diff options
author | Florian Hahn <flo@fhahn.com> | 2019-08-21 18:20:11 +0000 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2019-08-21 18:20:11 +0000 |
commit | 969b3e6a8fa3b324bbae72b089e2047f4741408b (patch) | |
tree | 972217254878f7290f62b21621241900093f299d /llvm/lib/Bitcode/Reader/BitcodeReader.cpp | |
parent | e4876c9d71ee4f416578579169792a53b73e7cf8 (diff) | |
download | bcm5719-llvm-969b3e6a8fa3b324bbae72b089e2047f4741408b.tar.gz bcm5719-llvm-969b3e6a8fa3b324bbae72b089e2047f4741408b.zip |
[BitcodeReader] Check if we can create a null constant for type.
We cannot create null constants for certain types, e.g. VoidTy,
FunctionTy or LabelTy. getNullValue asserts if we pass in an
unsupported type. We should also check for opaque types, but I'm not
sure how.
This fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14795.
Reviewers: t.p.northover, jfb, vsk
Reviewed By: vsk
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65897
llvm-svn: 369557
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 32ae4cd9956..af906071225 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2377,6 +2377,8 @@ Error BitcodeReader::parseConstants() { CurTy = flattenPointerTypes(CurFullTy); continue; // Skip the ValueList manipulation. case bitc::CST_CODE_NULL: // NULL + if (CurTy->isVoidTy() || CurTy->isFunctionTy() || CurTy->isLabelTy()) + return error("Invalid type for a constant null value"); V = Constant::getNullValue(CurTy); break; case bitc::CST_CODE_INTEGER: // INTEGER: [intval] |