mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 11:33:24 +02:00
[pdbdump] Verify TPI hash for LF_ENUM type records.
llvm-svn: 272728
This commit is contained in:
parent
a5ee0e6dc4
commit
8ec43ee7c2
@ -73,15 +73,31 @@ TpiStream::~TpiStream() {}
|
||||
// Currently we only verify SRC_LINE records.
|
||||
static Error verifyTIHash(const codeview::CVType &Rec, uint32_t Expected,
|
||||
uint32_t NumHashBuckets) {
|
||||
using namespace codeview;
|
||||
|
||||
ArrayRef<uint8_t> D = Rec.Data;
|
||||
if (Rec.Type == codeview::LF_UDT_SRC_LINE ||
|
||||
Rec.Type == codeview::LF_UDT_MOD_SRC_LINE) {
|
||||
uint32_t Hash =
|
||||
hashStringV1(StringRef((const char *)D.data(), 4)) % NumHashBuckets;
|
||||
if (Hash != Expected)
|
||||
uint32_t Hash;
|
||||
|
||||
switch (Rec.Type) {
|
||||
case LF_UDT_SRC_LINE:
|
||||
case LF_UDT_MOD_SRC_LINE:
|
||||
Hash = hashStringV1(StringRef((const char *)D.data(), 4));
|
||||
break;
|
||||
case LF_ENUM: {
|
||||
ErrorOr<EnumRecord> Enum = EnumRecord::deserialize(TypeRecordKind::Enum, D);
|
||||
if (Enum.getError())
|
||||
return make_error<RawError>(raw_error_code::corrupt_file,
|
||||
"Corrupt TPI hash table.");
|
||||
Hash = hashStringV1(Enum->getName());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
if ((Hash % NumHashBuckets) != Expected)
|
||||
return make_error<RawError>(raw_error_code::corrupt_file,
|
||||
"Corrupt TPI hash table.");
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user