mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Fix PR8494: when reading invalid bitcode, getTypeByID may return
a null pointer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117551 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
aa8f1f0135
commit
f22b74608e
@ -834,7 +834,8 @@ bool BitcodeReader::ParseMetadata() {
|
||||
unsigned Size = Record.size();
|
||||
SmallVector<Value*, 8> Elts;
|
||||
for (unsigned i = 0; i != Size; i += 2) {
|
||||
const Type *Ty = getTypeByID(Record[i], false);
|
||||
const Type *Ty = getTypeByID(Record[i]);
|
||||
if (!Ty) return Error("Invalid METADATA_NODE2 record");
|
||||
if (Ty->isMetadataTy())
|
||||
Elts.push_back(MDValueList.getValueFwdRef(Record[i+1]));
|
||||
else if (!Ty->isVoidTy())
|
||||
@ -1169,7 +1170,8 @@ bool BitcodeReader::ParseConstants() {
|
||||
}
|
||||
case bitc::CST_CODE_CE_SHUFVEC_EX: { // [opty, opval, opval, opval]
|
||||
const VectorType *RTy = dyn_cast<VectorType>(CurTy);
|
||||
const VectorType *OpTy = dyn_cast<VectorType>(getTypeByID(Record[0]));
|
||||
const VectorType *OpTy =
|
||||
dyn_cast_or_null<VectorType>(getTypeByID(Record[0]));
|
||||
if (Record.size() < 4 || RTy == 0 || OpTy == 0)
|
||||
return Error("Invalid CE_SHUFVEC_EX record");
|
||||
Constant *Op0 = ValueList.getConstantFwdRef(Record[1], OpTy);
|
||||
@ -1425,6 +1427,7 @@ bool BitcodeReader::ParseModule() {
|
||||
if (Record.size() < 6)
|
||||
return Error("Invalid MODULE_CODE_GLOBALVAR record");
|
||||
const Type *Ty = getTypeByID(Record[0]);
|
||||
if (!Ty) return Error("Invalid MODULE_CODE_GLOBALVAR record");
|
||||
if (!Ty->isPointerTy())
|
||||
return Error("Global not a pointer type!");
|
||||
unsigned AddressSpace = cast<PointerType>(Ty)->getAddressSpace();
|
||||
@ -1468,6 +1471,7 @@ bool BitcodeReader::ParseModule() {
|
||||
if (Record.size() < 8)
|
||||
return Error("Invalid MODULE_CODE_FUNCTION record");
|
||||
const Type *Ty = getTypeByID(Record[0]);
|
||||
if (!Ty) return Error("Invalid MODULE_CODE_FUNCTION record");
|
||||
if (!Ty->isPointerTy())
|
||||
return Error("Function not a pointer type!");
|
||||
const FunctionType *FTy =
|
||||
@ -1509,6 +1513,7 @@ bool BitcodeReader::ParseModule() {
|
||||
if (Record.size() < 3)
|
||||
return Error("Invalid MODULE_ALIAS record");
|
||||
const Type *Ty = getTypeByID(Record[0]);
|
||||
if (!Ty) return Error("Invalid MODULE_ALIAS record");
|
||||
if (!Ty->isPointerTy())
|
||||
return Error("Function not a pointer type!");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user