diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 3 | ||||
-rw-r--r-- | llvm/test/Bitcode/Inputs/invalid-void-constant.bc | bin | 0 -> 452 bytes | |||
-rw-r--r-- | llvm/test/Bitcode/invalid.test | 5 |
3 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 287be9b683a..91eb3f603f2 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2868,6 +2868,7 @@ std::error_code BitcodeReader::parseConstants() { // Read a record. Record.clear(); + Type *VoidType = Type::getVoidTy(Context); Value *V = nullptr; unsigned BitCode = Stream.readRecord(Entry.ID, Record); switch (BitCode) { @@ -2880,6 +2881,8 @@ std::error_code BitcodeReader::parseConstants() { return error("Invalid record"); if (Record[0] >= TypeList.size() || !TypeList[Record[0]]) return error("Invalid record"); + if (TypeList[Record[0]] == VoidType) + return error("Invalid constant type"); CurTy = TypeList[Record[0]]; continue; // Skip the ValueList manipulation. case bitc::CST_CODE_NULL: // NULL diff --git a/llvm/test/Bitcode/Inputs/invalid-void-constant.bc b/llvm/test/Bitcode/Inputs/invalid-void-constant.bc Binary files differnew file mode 100644 index 00000000000..7ab7b4167e3 --- /dev/null +++ b/llvm/test/Bitcode/Inputs/invalid-void-constant.bc diff --git a/llvm/test/Bitcode/invalid.test b/llvm/test/Bitcode/invalid.test index 499320140d7..43704639279 100644 --- a/llvm/test/Bitcode/invalid.test +++ b/llvm/test/Bitcode/invalid.test @@ -212,3 +212,8 @@ RUN: not llvm-dis -disable-output %p/Inputs/invalid-name-with-0-byte.bc 2>&1 | \ RUN: FileCheck --check-prefix=NAME-WITH-0 %s NAME-WITH-0: Invalid value name + +RUN: not llvm-dis -disable-output %p/Inputs/invalid-void-constant.bc 2>&1 | \ +RUN: FileCheck --check-prefix=VOID-CONSTANT-TYPE %s + +VOID-CONSTANT-TYPE: Invalid constant type |