[llvm] r285953 - PDB: Fix some APIs to avoid use-after-frees

Justin Bogner via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 3 11:28:05 PDT 2016


Author: bogner
Date: Thu Nov  3 13:28:04 2016
New Revision: 285953

URL: http://llvm.org/viewvc/llvm-project?rev=285953&view=rev
Log:
PDB: Fix some APIs to avoid use-after-frees

The buffer is already owned by the PDBFile for all of these APIs, so
don't pass it in separately.

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

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h?rev=285953&r1=285952&r2=285953&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h Thu Nov  3 13:28:04 2016
@@ -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);
 

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/InfoStreamBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/InfoStreamBuilder.h?rev=285953&r1=285952&r2=285953&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/InfoStreamBuilder.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/InfoStreamBuilder.h Thu Nov  3 13:28:04 2016
@@ -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;

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStreamBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStreamBuilder.h?rev=285953&r1=285952&r2=285953&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStreamBuilder.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStreamBuilder.h Thu Nov  3 13:28:04 2016
@@ -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);
 

Modified: llvm/trunk/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp?rev=285953&r1=285952&r2=285953&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp Thu Nov  3 13:28:04 2016
@@ -328,15 +328,15 @@ std::vector<SecMapEntry> DbiStreamBuilde
 }
 
 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);

Modified: llvm/trunk/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp?rev=285953&r1=285952&r2=285953&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp Thu Nov  3 13:28:04 2016
@@ -48,9 +48,9 @@ Error InfoStreamBuilder::finalizeMsfLayo
 }
 
 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;

Modified: llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFileBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFileBuilder.cpp?rev=285953&r1=285952&r2=285953&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFileBuilder.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/Raw/PDBFileBuilder.cpp Thu Nov  3 13:28:04 2016
@@ -97,28 +97,28 @@ PDBFileBuilder::build(std::unique_ptr<ms
   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);

Modified: llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStreamBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStreamBuilder.cpp?rev=285953&r1=285952&r2=285953&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStreamBuilder.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStreamBuilder.cpp Thu Nov  3 13:28:04 2016
@@ -99,16 +99,15 @@ Error TpiStreamBuilder::finalizeMsfLayou
   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);




More information about the llvm-commits mailing list