Add version number checking to PTH files.

llvm-svn: 63047
This commit is contained in:
Ted Kremenek 2009-01-26 21:50:21 +00:00
parent eb8c8fbd63
commit 978b5becea
2 changed files with 9 additions and 2 deletions

View File

@ -456,6 +456,7 @@ void PTHWriter::EmitCachedSpellings() {
void PTHWriter::GeneratePTH() {
// Generate the prologue.
Out << "cfe-pth";
Emit32(PTHManager::Version);
Offset JumpOffset = Out.tell();
Emit32(0);

View File

@ -522,12 +522,18 @@ PTHManager* PTHManager::Create(const std::string& file) {
const unsigned char* BufEnd = (unsigned char*)File->getBufferEnd();
// Check the prologue of the file.
if ((BufEnd - BufBeg) < (unsigned) (sizeof("cfe-pth") + 3) ||
if ((BufEnd - BufBeg) < (unsigned) (sizeof("cfe-pth") + 3 + 4) ||
memcmp(BufBeg, "cfe-pth", sizeof("cfe-pth") - 1) != 0)
return 0;
// Compute the address of the index table at the end of the PTH file.
// Read the PTH version.
const unsigned char *p = BufBeg + (sizeof("cfe-pth") - 1);
unsigned Version = ReadLE32(p);
if (Version != PTHManager::Version)
return 0;
// Compute the address of the index table at the end of the PTH file.
const unsigned char *EndTable = BufBeg + ReadLE32(p);
if (EndTable >= BufEnd)