diff options
author | Zachary Turner <zturner@google.com> | 2016-06-08 17:26:39 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2016-06-08 17:26:39 +0000 |
commit | a1657a9e64c1e8df34e32ca69fac918a7d28c60a (patch) | |
tree | 74993d26964f0f2f28bed1a30e85b19401a2f34e /llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp | |
parent | ced0853b468dadcf50ad5dae68017e3cd9c86bda (diff) | |
download | llvm-a1657a9e64c1e8df34e32ca69fac918a7d28c60a.zip llvm-a1657a9e64c1e8df34e32ca69fac918a7d28c60a.tar.gz llvm-a1657a9e64c1e8df34e32ca69fac918a7d28c60a.tar.bz2 |
[pdb] Handle stream index errors better.
Reviewed By: ruiu
Differential Revision: http://reviews.llvm.org/D21128
llvm-svn: 272172
Diffstat (limited to 'llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp')
-rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp index f34a513..245e314 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp @@ -62,15 +62,14 @@ struct TpiStream::HeaderInfo { EmbeddedBuf HashAdjBuffer; }; -TpiStream::TpiStream(const PDBFile &File, uint32_t StreamIdx) - : Pdb(File), - Stream(llvm::make_unique<IndexedStreamData>(StreamIdx, File), File), - HashFunction(nullptr) {} +TpiStream::TpiStream(const PDBFile &File, + std::unique_ptr<MappedBlockStream> Stream) + : Pdb(File), Stream(std::move(Stream)), HashFunction(nullptr) {} TpiStream::~TpiStream() {} Error TpiStream::reload() { - codeview::StreamReader Reader(Stream); + codeview::StreamReader Reader(*Stream); if (Reader.bytesRemaining() < sizeof(HeaderInfo)) return make_error<RawError>(raw_error_code::corrupt_file, @@ -108,9 +107,11 @@ Error TpiStream::reload() { return make_error<RawError>(raw_error_code::corrupt_file, "Invalid TPI hash stream index."); - HashStream.reset(new MappedBlockStream( - llvm::make_unique<IndexedStreamData>(Header->HashStreamIndex, Pdb), Pdb)); - codeview::StreamReader HSR(*HashStream); + auto HS = + MappedBlockStream::createIndexedStream(Header->HashStreamIndex, Pdb); + if (!HS) + return HS.takeError(); + codeview::StreamReader HSR(**HS); uint32_t NumHashValues = Header->HashValueBuffer.Length / sizeof(ulittle32_t); if (NumHashValues != NumTypeRecords()) @@ -133,6 +134,7 @@ Error TpiStream::reload() { if (auto EC = HSR.readArray(HashAdjustments, NumHashAdjustments)) return EC; + HashStream = std::move(*HS); return Error::success(); } |