41 if (buffer.empty() || offset < 0)
44 FX_SAFE_SIZE_T new_pos = buffer.size();
46 if (!new_pos.IsValid() || new_pos.ValueOrDefault(0) == 0 ||
47 new_pos.ValueOrDie() > m_nCurSize) {
51 m_nCurPos = new_pos.ValueOrDie();
54 fxcrt::Copy(GetSpan().subspan(
static_cast<size_t>(offset), buffer.size()),
59bool CFX_MemoryStream::
WriteBlock(pdfium::span<
const uint8_t> buffer) {
63 FX_SAFE_SIZE_T safe_new_pos = buffer.size();
64 safe_new_pos += m_nCurSize;
65 if (!safe_new_pos.IsValid()) {
69 size_t new_pos = safe_new_pos.ValueOrDie();
70 if (new_pos > m_data.size()) {
71 static constexpr size_t kBlockSize = 64 * 1024;
72 FX_SAFE_SIZE_T new_size = new_pos;
74 new_size += (kBlockSize - 1);
75 new_size /= kBlockSize;
76 new_size *= kBlockSize;
77 if (!new_size.IsValid())
80 m_data.resize(new_size.ValueOrDie());
84 fxcrt::Copy(buffer, pdfium::make_span(m_data).subspan(m_nCurSize));
85 m_nCurSize = std::max(m_nCurSize, m_nCurPos);