diff options
| author | Dan Gohman <gohman@apple.com> | 2010-04-02 00:03:51 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2010-04-02 00:03:51 +0000 |
| commit | cd530fbf416802333ebab6011acc93f4b5879ba0 (patch) | |
| tree | 260bb0c2ecd723b30ff2080f6c82b28a999dcbc8 /lib/Bitcode | |
| parent | 89e91872b46c06a6b2c4e384bd59fbab6df6c1bf (diff) | |
| download | external_llvm-cd530fbf416802333ebab6011acc93f4b5879ba0.zip external_llvm-cd530fbf416802333ebab6011acc93f4b5879ba0.tar.gz external_llvm-cd530fbf416802333ebab6011acc93f4b5879ba0.tar.bz2 | |
If the bitcode reader input stream isn't a multiple of 4 bytes, it's more
likely not a bitcode file at all, rather than being a bitcode file which
is truncated. Check for this case and issue a more relevant error message.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100156 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bitcode')
| -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 b9453c9..76d112e 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)) |
