mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
InstrProf: Actually detect bad headers
<rdar://problem/15950346> llvm-svn: 204510
This commit is contained in:
parent
215a35c5c8
commit
3920850b70
@ -27,6 +27,7 @@ struct instrprof_error {
|
||||
success = 0,
|
||||
eof,
|
||||
bad_magic,
|
||||
bad_header,
|
||||
unsupported_version,
|
||||
too_large,
|
||||
truncated,
|
||||
|
@ -29,6 +29,8 @@ class InstrProfErrorCategoryType : public error_category {
|
||||
return "End of File";
|
||||
case instrprof_error::bad_magic:
|
||||
return "Invalid file format (bad magic)";
|
||||
case instrprof_error::bad_header:
|
||||
return "Invalid header";
|
||||
case instrprof_error::unsupported_version:
|
||||
return "Unsupported format version";
|
||||
case instrprof_error::too_large:
|
||||
|
@ -43,8 +43,7 @@ error_code InstrProfReader::create(std::string Path,
|
||||
|
||||
if (Buffer->getBufferSize() < sizeof(uint64_t)) {
|
||||
Result.reset(new TextInstrProfReader(Buffer));
|
||||
Result->readHeader();
|
||||
return instrprof_error::success;
|
||||
return Result->readHeader();
|
||||
}
|
||||
|
||||
uint64_t Magic = *(uint64_t *)Buffer->getBufferStart();
|
||||
@ -53,8 +52,7 @@ error_code InstrProfReader::create(std::string Path,
|
||||
Result.reset(new RawInstrProfReader(Buffer));
|
||||
else
|
||||
Result.reset(new TextInstrProfReader(Buffer));
|
||||
Result->readHeader();
|
||||
return instrprof_error::success;
|
||||
return Result->readHeader();
|
||||
}
|
||||
|
||||
void InstrProfIterator::Increment() {
|
||||
@ -113,13 +111,13 @@ RawInstrProfReader::RawInstrProfReader(std::unique_ptr<MemoryBuffer> &DataBuffer
|
||||
|
||||
error_code RawInstrProfReader::readHeader() {
|
||||
if (DataBuffer->getBufferSize() < sizeof(RawHeader))
|
||||
return error(instrprof_error::malformed);
|
||||
return error(instrprof_error::bad_header);
|
||||
const RawHeader *Header = (RawHeader *)DataBuffer->getBufferStart();
|
||||
if (Header->Magic == getRawMagic())
|
||||
ShouldSwapBytes = false;
|
||||
else {
|
||||
if (sys::SwapByteOrder(Header->Magic) != getRawMagic())
|
||||
return error(instrprof_error::malformed);
|
||||
return error(instrprof_error::bad_magic);
|
||||
|
||||
ShouldSwapBytes = true;
|
||||
}
|
||||
@ -142,7 +140,7 @@ error_code RawInstrProfReader::readHeader(const RawHeader &Header) {
|
||||
size_t FileSize = NamesOffset + sizeof(char) * NamesSize;
|
||||
|
||||
if (FileSize != DataBuffer->getBufferSize())
|
||||
return error(instrprof_error::malformed);
|
||||
return error(instrprof_error::bad_header);
|
||||
|
||||
Data = (ProfileData *)(DataBuffer->getBufferStart() + DataOffset);
|
||||
DataEnd = Data + DataSize;
|
||||
|
6
test/tools/llvm-profdata/raw-magic-but-no-header.test
Normal file
6
test/tools/llvm-profdata/raw-magic-but-no-header.test
Normal file
@ -0,0 +1,6 @@
|
||||
RUN: printf "warforpl" > %t
|
||||
RUN: not llvm-profdata show %t 2>&1 | FileCheck %s
|
||||
RUN: printf "lprofraw" > %t
|
||||
RUN: not llvm-profdata show %t 2>&1 | FileCheck %s
|
||||
|
||||
CHECK: error: {{.+}}: Invalid header
|
Loading…
Reference in New Issue
Block a user