@@ -87,6 +87,20 @@ Error NativeSession::createFromPdb(std::unique_ptr<MemoryBuffer> Buffer,
8787 return Error::success ();
8888}
8989
90+ Error validatePdbMagic (StringRef PdbPath) {
91+ file_magic Magic;
92+ auto EC = identify_magic (PdbPath, Magic);
93+ if (EC)
94+ return make_error<RawError>(EC);
95+
96+ if (Magic != file_magic::pdb)
97+ return make_error<RawError>(
98+ raw_error_code::invalid_format,
99+ " The input file did not contain the pdb file magic." );
100+
101+ return Error::success ();
102+ }
103+
90104static Expected<std::unique_ptr<PDBFile>>
91105loadPdbFile (StringRef PdbPath, std::unique_ptr<BumpPtrAllocator> &Allocator) {
92106 ErrorOr<std::unique_ptr<MemoryBuffer>> ErrorOrBuffer =
@@ -97,10 +111,8 @@ loadPdbFile(StringRef PdbPath, std::unique_ptr<BumpPtrAllocator> &Allocator) {
97111 std::unique_ptr<llvm::MemoryBuffer> Buffer = std::move (*ErrorOrBuffer);
98112
99113 PdbPath = Buffer->getBufferIdentifier ();
100- file_magic Magic;
101- auto EC = identify_magic (PdbPath, Magic);
102- if (EC || Magic != file_magic::pdb)
103- return make_error<RawError>(EC);
114+ if (auto E = validatePdbMagic (PdbPath))
115+ return std::move (E);
104116
105117 auto Stream = std::make_unique<MemoryBufferByteStream>(
106118 std::move (Buffer), llvm::endianness::little);
@@ -152,10 +164,8 @@ Error NativeSession::createFromExe(StringRef ExePath,
152164 if (!PdbPath)
153165 return PdbPath.takeError ();
154166
155- file_magic Magic;
156- auto EC = identify_magic (PdbPath.get (), Magic);
157- if (EC || Magic != file_magic::pdb)
158- return make_error<RawError>(EC);
167+ if (auto E = validatePdbMagic (PdbPath.get ()))
168+ return std::move (E);
159169
160170 auto Allocator = std::make_unique<BumpPtrAllocator>();
161171 auto File = loadPdbFile (PdbPath.get (), Allocator);
0 commit comments