From a1657a9e64c1e8df34e32ca69fac918a7d28c60a Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Wed, 8 Jun 2016 17:26:39 +0000 Subject: [pdb] Handle stream index errors better. Reviewed By: ruiu Differential Revision: http://reviews.llvm.org/D21128 llvm-svn: 272172 --- llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp') 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(StreamIdx, File), File), - HashFunction(nullptr) {} +TpiStream::TpiStream(const PDBFile &File, + std::unique_ptr 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(raw_error_code::corrupt_file, @@ -108,9 +107,11 @@ Error TpiStream::reload() { return make_error(raw_error_code::corrupt_file, "Invalid TPI hash stream index."); - HashStream.reset(new MappedBlockStream( - llvm::make_unique(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(); } -- cgit v1.1