pdbdump: Fix crash bug.
authorRui Ueyama <ruiu@google.com>
Wed, 3 Aug 2016 23:43:23 +0000 (23:43 +0000)
committerRui Ueyama <ruiu@google.com>
Wed, 3 Aug 2016 23:43:23 +0000 (23:43 +0000)
pdbdump calls DbiStreamBuilder::commit through PDBFileBuilder::commit
without calling DbiStreamBuilder::finalize. Because `finalize` initializes
`Header` member, `Header` remained nullptr which caused a crash bug.

Differential Revision: https://reviews.llvm.org/D23143

llvm-svn: 277681

llvm/include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h
llvm/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp
llvm/test/DebugInfo/PDB/pdbdump-readwrite.test [new file with mode: 0644]

index 9b93efe..d0f8754 100644 (file)
@@ -49,7 +49,7 @@ public:
   Expected<std::unique_ptr<DbiStream>> build(PDBFile &File,
                                              const msf::WritableStream &Buffer);
   Error commit(const msf::MSFLayout &Layout,
-               const msf::WritableStream &Buffer) const;
+               const msf::WritableStream &Buffer);
 
 private:
   Error finalize();
index 711295d..b0bb4a0 100644 (file)
@@ -249,7 +249,10 @@ DbiStreamBuilder::build(PDBFile &File, const msf::WritableStream &Buffer) {
 }
 
 Error DbiStreamBuilder::commit(const msf::MSFLayout &Layout,
-                               const msf::WritableStream &Buffer) const {
+                               const msf::WritableStream &Buffer) {
+  if (auto EC = finalize())
+    return EC;
+
   auto InfoS =
       WritableMappedBlockStream::createIndexedStream(Layout, Buffer, StreamDBI);
 
diff --git a/llvm/test/DebugInfo/PDB/pdbdump-readwrite.test b/llvm/test/DebugInfo/PDB/pdbdump-readwrite.test
new file mode 100644 (file)
index 0000000..e533ab7
--- /dev/null
@@ -0,0 +1,4 @@
+; RUN: llvm-pdbdump pdb2yaml -dbi-module-info -dbi-module-source-info \
+; RUN:   -dbi-stream -pdb-stream -stream-directory -stream-metadata \
+; RUN:   %p/Inputs/empty.pdb > %t.1
+; RUN: llvm-pdbdump yaml2pdb -pdb=%t.2 %t.1