diff options
Diffstat (limited to 'lib/Bitcode/Reader/BitcodeReader.cpp')
| -rw-r--r-- | lib/Bitcode/Reader/BitcodeReader.cpp | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index b9453c90b583f..76d112e045a3f 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -1527,12 +1527,16 @@ bool BitcodeReader::ParseModule() {  bool BitcodeReader::ParseBitcodeInto(Module *M) {    TheModule = 0; -  if (Buffer->getBufferSize() & 3) -    return Error("Bitcode stream should be a multiple of 4 bytes in length"); -    unsigned char *BufPtr = (unsigned char *)Buffer->getBufferStart();    unsigned char *BufEnd = BufPtr+Buffer->getBufferSize(); +  if (Buffer->getBufferSize() & 3) { +    if (!isRawBitcode(BufPtr, BufEnd) && !isBitcodeWrapper(BufPtr, BufEnd)) +      return Error("Invalid bitcode signature"); +    else +      return Error("Bitcode stream should be a multiple of 4 bytes in length"); +  } +    // If we have a wrapper header, parse it and ignore the non-bc file contents.    // The magic number is 0x0B17C0DE stored in little endian.    if (isBitcodeWrapper(BufPtr, BufEnd)) | 
