19 auto It = StreamMap.find(
Type);
20 if (It != StreamMap.end())
21 return getRawStream(Streams[It->second]);
30 getDataSliceAs<support::ulittle32_t>(getData(), Offset, 1);
32 return ExpectedSize.takeError();
33 size_t Size = (*ExpectedSize)[0];
42 getDataSliceAs<support::ulittle16_t>(getData(), Offset, Size);
44 return ExpectedData.takeError();
47 copy(*ExpectedData, WStr.begin());
62 getDataSliceAs<minidump::MemoryInfoListHeader>(*Stream, 0, 1);
64 return ExpectedHeader.takeError();
67 getDataSlice(*Stream,
H.SizeOfHeader,
H.SizeOfEntry *
H.NumberOfEntries);
69 return Data.takeError();
79 auto ExpectedSize = getDataSliceAs<support::ulittle32_t>(*Stream, 0, 1);
81 return ExpectedSize.takeError();
83 size_t ListSize = ExpectedSize.get()[0];
85 size_t ListOffset = 4;
89 if (ListOffset +
sizeof(
T) * ListSize < Stream->
size())
92 return getDataSliceAs<T>(*Stream, ListOffset, ListSize);
104 if (Offset + Size < Offset || Offset + Size < Size ||
105 Offset + Size >
Data.size())
106 return createEOFError();
107 return Data.slice(Offset, Size);
113 auto ExpectedHeader = getDataSliceAs<minidump::Header>(
Data, 0, 1);
115 return ExpectedHeader.takeError();
118 if (Hdr.
Signature != Header::MagicSignature)
120 if ((Hdr.
Version & 0xffff) != Header::MagicVersion)
125 if (!ExpectedStreams)
126 return ExpectedStreams.takeError();
129 for (
const auto &StreamDescriptor :
llvm::enumerate(*ExpectedStreams)) {
136 return Stream.takeError();
146 return createError(
"Cannot handle one of the minidump streams");
153 return std::unique_ptr<MinidumpFile>(