1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[CodeView] Validate the vftable offset

llvm-svn: 271791
This commit is contained in:
David Majnemer 2016-06-04 15:40:29 +00:00
parent 3e22310a07
commit 838aba6c09

View File

@ -1061,8 +1061,12 @@ public:
MethodOptions Options = L->Attrs.getFlags();
MethodKind MethKind = L->Attrs.getMethodKind();
MemberAccess Access = L->Attrs.getAccess();
return OneMethodRecord(L->Type, MethKind, Options, Access, VFTableOffset,
OneMethodRecord Method(L->Type, MethKind, Options, Access, VFTableOffset,
Name);
// Validate the vftable offset.
if (Method.isIntroducingVirtual() && Method.getVFTableOffset() < 0)
return std::make_error_code(std::errc::illegal_byte_sequence);
return Method;
}
TypeIndex getType() const { return Type; }
@ -1122,6 +1126,11 @@ public:
Methods.emplace_back(L->Type, MethKind, Options, Access, VFTableOffset,
StringRef());
// Validate the vftable offset.
auto &Method = Methods.back();
if (Method.isIntroducingVirtual() && Method.getVFTableOffset() < 0)
return std::make_error_code(std::errc::illegal_byte_sequence);
}
return MethodOverloadListRecord(Methods);
}