From: Florian Hahn Date: Wed, 21 Aug 2019 18:20:11 +0000 (+0000) Subject: [BitcodeReader] Check if we can create a null constant for type. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=47b49a52aec934be17fcee140001b399b47a55bc;p=llvm [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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369557 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 32ae4cd9956..af906071225 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/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] diff --git a/test/Bitcode/invalid-type-for-null-constant.ll b/test/Bitcode/invalid-type-for-null-constant.ll new file mode 100644 index 00000000000..28756fa1823 --- /dev/null +++ b/test/Bitcode/invalid-type-for-null-constant.ll @@ -0,0 +1,6 @@ +; Bitcode with a CST_CODE_NULL with void type. + +; RUN: not llvm-dis %s.bc -o - 2>&1 | FileCheck %s + +; CHECK: error: Invalid type for a constant null value + diff --git a/test/Bitcode/invalid-type-for-null-constant.ll.bc b/test/Bitcode/invalid-type-for-null-constant.ll.bc new file mode 100644 index 00000000000..6196ebccb9d Binary files /dev/null and b/test/Bitcode/invalid-type-for-null-constant.ll.bc differ