PDB: Fix some APIs to avoid use-after-frees
authorJustin Bogner <mail@justinbogner.com>
Thu, 3 Nov 2016 18:28:04 +0000 (18:28 +0000)
committerJustin Bogner <mail@justinbogner.com>
Thu, 3 Nov 2016 18:28:04 +0000 (18:28 +0000)
The buffer is already owned by the PDBFile for all of these APIs, so
don't pass it in separately.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@285953 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h
include/llvm/DebugInfo/PDB/Raw/InfoStreamBuilder.h
include/llvm/DebugInfo/PDB/Raw/TpiStreamBuilder.h
lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp
lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp
lib/DebugInfo/PDB/Raw/PDBFileBuilder.cpp
lib/DebugInfo/PDB/Raw/TpiStreamBuilder.cpp

index 749a8662fb7b959ced0b245e81081a5c3755b5b4..0784b5ee78171572e129e830bab7b6703c72c244 100644 (file)
@@ -59,8 +59,7 @@ public:
 
   Error finalizeMsfLayout();
 
-  Expected<std::unique_ptr<DbiStream>> build(PDBFile &File,
-                                             const msf::WritableStream &Buffer);
+  Expected<std::unique_ptr<DbiStream>> build(PDBFile &File);
   Error commit(const msf::MSFLayout &Layout,
                const msf::WritableStream &Buffer);
 
index f7a66c18f5702e141c7b29865f5c74abfefa9472..5afbf820a0cea775ba9b93fa4b531e8d6797b2b1 100644 (file)
@@ -43,8 +43,7 @@ public:
 
   Error finalizeMsfLayout();
 
-  Expected<std::unique_ptr<InfoStream>>
-  build(PDBFile &File, const msf::WritableStream &Buffer);
+  Expected<std::unique_ptr<InfoStream>> build(PDBFile &File);
 
   Error commit(const msf::MSFLayout &Layout,
                const msf::WritableStream &Buffer) const;
index 2248fc8875bacdf02c1d393d671b8d0468dccde4..937b188e96ea2b2e2021943b00cce2b06ca485da 100644 (file)
@@ -56,8 +56,7 @@ public:
 
   Error finalizeMsfLayout();
 
-  Expected<std::unique_ptr<TpiStream>> build(PDBFile &File,
-                                             const msf::WritableStream &Buffer);
+  Expected<std::unique_ptr<TpiStream>> build(PDBFile &File);
 
   Error commit(const msf::MSFLayout &Layout, const msf::WritableStream &Buffer);
 
index 4ee28c7d81185c15983610cd772d84877fdcc2da..6067e5ce842b5a9094f3e1d3c1615d0464a938b2 100644 (file)
@@ -328,15 +328,15 @@ std::vector<SecMapEntry> DbiStreamBuilder::createSectionMap(
 }
 
 Expected<std::unique_ptr<DbiStream>>
-DbiStreamBuilder::build(PDBFile &File, const msf::WritableStream &Buffer) {
+DbiStreamBuilder::build(PDBFile &File) {
   if (!VerHeader.hasValue())
     return make_error<RawError>(raw_error_code::unspecified,
                                 "Missing DBI Stream Version");
   if (auto EC = finalize())
     return std::move(EC);
 
-  auto StreamData = MappedBlockStream::createIndexedStream(File.getMsfLayout(),
-                                                           Buffer, StreamDBI);
+  auto StreamData = MappedBlockStream::createIndexedStream(
+      File.getMsfLayout(), File.getMsfBuffer(), StreamDBI);
   auto Dbi = llvm::make_unique<DbiStream>(File, std::move(StreamData));
   Dbi->Header = Header;
   Dbi->FileInfoSubstream = ReadableStreamRef(FileInfoBuffer);
index 991e32d4ac73ebfc350bedc4614d93180a1a20e1..e909c30e95f0729bbaca32c95624f01648e53631 100644 (file)
@@ -48,9 +48,9 @@ Error InfoStreamBuilder::finalizeMsfLayout() {
 }
 
 Expected<std::unique_ptr<InfoStream>>
-InfoStreamBuilder::build(PDBFile &File, const msf::WritableStream &Buffer) {
-  auto StreamData = MappedBlockStream::createIndexedStream(File.getMsfLayout(),
-                                                           Buffer, StreamPDB);
+InfoStreamBuilder::build(PDBFile &File) {
+  auto StreamData = MappedBlockStream::createIndexedStream(
+      File.getMsfLayout(), File.getMsfBuffer(), StreamPDB);
   auto Info = llvm::make_unique<InfoStream>(std::move(StreamData));
   Info->Version = Ver;
   Info->Signature = Sig;
index dcd8662913cc4d7cf6832ff350fceb9d55e736a1..e47d11cf61a3b101d0419b33f21e2b3446c364ef 100644 (file)
@@ -97,28 +97,28 @@ PDBFileBuilder::build(std::unique_ptr<msf::WritableStream> PdbFileBuffer) {
   File->ContainerLayout = *ExpectedLayout;
 
   if (Info) {
-    auto ExpectedInfo = Info->build(*File, *PdbFileBuffer);
+    auto ExpectedInfo = Info->build(*File);
     if (!ExpectedInfo)
       return ExpectedInfo.takeError();
     File->Info = std::move(*ExpectedInfo);
   }
 
   if (Dbi) {
-    auto ExpectedDbi = Dbi->build(*File, *PdbFileBuffer);
+    auto ExpectedDbi = Dbi->build(*File);
     if (!ExpectedDbi)
       return ExpectedDbi.takeError();
     File->Dbi = std::move(*ExpectedDbi);
   }
 
   if (Tpi) {
-    auto ExpectedTpi = Tpi->build(*File, *PdbFileBuffer);
+    auto ExpectedTpi = Tpi->build(*File);
     if (!ExpectedTpi)
       return ExpectedTpi.takeError();
     File->Tpi = std::move(*ExpectedTpi);
   }
 
   if (Ipi) {
-    auto ExpectedIpi = Ipi->build(*File, *PdbFileBuffer);
+    auto ExpectedIpi = Ipi->build(*File);
     if (!ExpectedIpi)
       return ExpectedIpi.takeError();
     File->Ipi = std::move(*ExpectedIpi);
index 733efe882a2438dbd591bee2423442de5f0d5aeb..d8bae59195ce5aeaf6f20e4c632dd746caf46379 100644 (file)
@@ -99,16 +99,15 @@ Error TpiStreamBuilder::finalizeMsfLayout() {
   return Error::success();
 }
 
-Expected<std::unique_ptr<TpiStream>>
-TpiStreamBuilder::build(PDBFile &File, const msf::WritableStream &Buffer) {
+Expected<std::unique_ptr<TpiStream>> TpiStreamBuilder::build(PDBFile &File) {
   if (!VerHeader.hasValue())
     return make_error<RawError>(raw_error_code::unspecified,
                                 "Missing TPI Stream Version");
   if (auto EC = finalize())
     return std::move(EC);
 
-  auto StreamData =
-      MappedBlockStream::createIndexedStream(File.getMsfLayout(), Buffer, Idx);
+  auto StreamData = MappedBlockStream::createIndexedStream(
+      File.getMsfLayout(), File.getMsfBuffer(), Idx);
   auto Tpi = llvm::make_unique<TpiStream>(File, std::move(StreamData));
   Tpi->Header = Header;
   Tpi->TypeRecords = VarStreamArray<codeview::CVType>(TypeRecordStream);