| Index: lib/Bitcode/NaCl/Analysis/NaClCompress.cpp
|
| diff --git a/lib/Bitcode/NaCl/Analysis/NaClCompress.cpp b/lib/Bitcode/NaCl/Analysis/NaClCompress.cpp
|
| index d4c327f6b189c8951c6ca8234b12165ca9b6a0f4..c69c815f562c7a93d9855db9ce20596882efc377 100644
|
| --- a/lib/Bitcode/NaCl/Analysis/NaClCompress.cpp
|
| +++ b/lib/Bitcode/NaCl/Analysis/NaClCompress.cpp
|
| @@ -1158,14 +1158,21 @@ static bool analyzeBitcode(
|
|
|
| const unsigned char *BufPtr = (const unsigned char *)MemBuf->getBufferStart();
|
| const unsigned char *EndBufPtr = BufPtr+MemBuf->getBufferSize();
|
| + const unsigned char *HeaderPtr = BufPtr;
|
|
|
| // First read header and verify it is good.
|
| NaClBitcodeHeader Header;
|
| - if (Header.Read(BufPtr, EndBufPtr) || !Header.IsSupported())
|
| + if (Header.Read(HeaderPtr, EndBufPtr))
|
| return Error("Invalid PNaCl bitcode header");
|
| + if (!Header.IsSupported()) {
|
| + errs() << Header.Unsupported();
|
| + if (!Header.IsReadable())
|
| + return Error("Invalid PNaCl bitcode header");
|
| + }
|
|
|
| // Create a bitstream reader to read the bitcode file.
|
| - NaClBitstreamReader StreamFile(BufPtr, EndBufPtr);
|
| + NaClBitstreamReader StreamFile(
|
| + getNonStreamedMemoryObject(BufPtr, EndBufPtr), Header);
|
| NaClBitstreamCursor Stream(StreamFile);
|
|
|
| // Parse the the bitcode file.
|
| @@ -1381,15 +1388,17 @@ static bool chooseAbbrevs(MemoryBuffer *MemBuf, BlockAbbrevsMapType &AbbrevsMap,
|
| BlockAbbrevsQueueMap &AbbrevsQueueMap) {
|
| const unsigned char *BufPtr = (const unsigned char *)MemBuf->getBufferStart();
|
| const unsigned char *EndBufPtr = BufPtr + MemBuf->getBufferSize();
|
| + const unsigned char *HeaderPtr = BufPtr;
|
|
|
| // Read header. No verification is needed since AnalyzeBitcode has
|
| // already checked it.
|
| NaClBitcodeHeader Header;
|
| - if (Header.Read(BufPtr, EndBufPtr))
|
| + if (Header.Read(HeaderPtr, EndBufPtr))
|
| return Error("Invalid PNaCl bitcode header");
|
|
|
| // Create the bitcode reader.
|
| - NaClBitstreamReader StreamFile(BufPtr, EndBufPtr);
|
| + NaClBitstreamReader StreamFile(
|
| + getNonStreamedMemoryObject(BufPtr, EndBufPtr), Header);
|
| NaClBitstreamCursor Stream(StreamFile);
|
|
|
| // Set up the parser.
|
| @@ -1579,15 +1588,17 @@ static bool copyBitcode(const NaClBitcodeCompressor::CompressFlags &Flags,
|
|
|
| const unsigned char *BufPtr = (const unsigned char *)MemBuf->getBufferStart();
|
| const unsigned char *EndBufPtr = BufPtr + MemBuf->getBufferSize();
|
| + const unsigned char *HeaderPtr = BufPtr;
|
|
|
| // Read header. No verification is needed since AnalyzeBitcode has
|
| // already checked it.
|
| NaClBitcodeHeader Header;
|
| - if (Header.Read(BufPtr, EndBufPtr))
|
| + if (Header.Read(HeaderPtr, EndBufPtr))
|
| return Error("Invalid PNaCl bitcode header");
|
|
|
| // Create the bitcode reader.
|
| - NaClBitstreamReader StreamFile(BufPtr, EndBufPtr);
|
| + NaClBitstreamReader StreamFile(
|
| + getNonStreamedMemoryObject(BufPtr, EndBufPtr), Header);
|
| NaClBitstreamCursor Stream(StreamFile);
|
|
|
| // Create the bitcode writer.
|
|
|