From d1d8c8312a41f10f294978decc57c3f5dcfef205 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 3 Aug 2016 23:43:23 +0000 Subject: [PATCH] pdbdump: Fix crash bug. 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 | 2 +- llvm/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp | 5 ++++- llvm/test/DebugInfo/PDB/pdbdump-readwrite.test | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 llvm/test/DebugInfo/PDB/pdbdump-readwrite.test diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h b/llvm/include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h index 9b93efe..d0f8754 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h +++ b/llvm/include/llvm/DebugInfo/PDB/Raw/DbiStreamBuilder.h @@ -49,7 +49,7 @@ public: Expected> 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(); diff --git a/llvm/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp b/llvm/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp index 711295d..b0bb4a0 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp @@ -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 index 0000000..e533ab7 --- /dev/null +++ b/llvm/test/DebugInfo/PDB/pdbdump-readwrite.test @@ -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 -- 2.7.4