Use more spans in streams, part 3.
Change-Id: I2f49fb07f21c49938aef1748b2c88eebf9d1d630
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/100532
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp
index 47671df..1f33fce 100644
--- a/core/fpdfapi/edit/cpdf_creator.cpp
+++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -40,7 +40,7 @@
explicit CFX_FileBufferArchive(RetainPtr<IFX_RetainableWriteStream> file);
~CFX_FileBufferArchive() override;
- bool WriteBlock(const void* pBuf, size_t size) override;
+ bool WriteBlock(pdfium::span<const uint8_t> buffer) override;
FX_FILESIZE CurrentOffset() const override { return offset_; }
private:
@@ -69,16 +69,14 @@
available_ = pdfium::make_span(buffer_);
if (!nUsed)
return true;
- return backing_file_->WriteBlock(buffer_.data(), nUsed);
+ return backing_file_->WriteBlock(available_.first(nUsed));
}
-bool CFX_FileBufferArchive::WriteBlock(const void* pBuf, size_t size) {
- if (size == 0)
+bool CFX_FileBufferArchive::WriteBlock(pdfium::span<const uint8_t> buffer) {
+ if (buffer.empty())
return true;
- DCHECK(pBuf);
- auto* pSrc = reinterpret_cast<const uint8_t*>(pBuf);
- pdfium::span<const uint8_t> src_span(pSrc, size);
+ pdfium::span<const uint8_t> src_span = buffer;
while (!src_span.empty()) {
size_t copy_size = std::min(available_.size(), src_span.size());
fxcrt::spancpy(available_, src_span.first(copy_size));
@@ -89,7 +87,7 @@
}
FX_SAFE_FILESIZE safe_offset = offset_;
- safe_offset += size;
+ safe_offset += buffer.size();
if (!safe_offset.IsValid())
return false;
diff --git a/core/fpdfapi/edit/cpdf_stringarchivestream.cpp b/core/fpdfapi/edit/cpdf_stringarchivestream.cpp
index 34e6b22..4d9f7f2 100644
--- a/core/fpdfapi/edit/cpdf_stringarchivestream.cpp
+++ b/core/fpdfapi/edit/cpdf_stringarchivestream.cpp
@@ -18,7 +18,7 @@
return false;
}
-bool CPDF_StringArchiveStream::WriteBlock(const void* pData, size_t size) {
- stream_->write(static_cast<const char*>(pData), size);
+bool CPDF_StringArchiveStream::WriteBlock(pdfium::span<const uint8_t> buffer) {
+ stream_->write(reinterpret_cast<const char*>(buffer.data()), buffer.size());
return true;
}
diff --git a/core/fpdfapi/edit/cpdf_stringarchivestream.h b/core/fpdfapi/edit/cpdf_stringarchivestream.h
index f822b56..1306343 100644
--- a/core/fpdfapi/edit/cpdf_stringarchivestream.h
+++ b/core/fpdfapi/edit/cpdf_stringarchivestream.h
@@ -14,7 +14,7 @@
~CPDF_StringArchiveStream() override;
// IFX_ArchiveStream:
- bool WriteBlock(const void* pData, size_t size) override;
+ bool WriteBlock(pdfium::span<const uint8_t> buffer) override;
FX_FILESIZE CurrentOffset() const override;
private:
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index 50a8011..aa85f81 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -1203,7 +1203,7 @@
static_cast<uint32_t>(std::min(kBufferSize, src_size));
if (!m_pSyntax->ReadBlock(buffer.data(), block_size))
return false;
- if (!archive->WriteBlock(buffer.data(), block_size))
+ if (!archive->WriteBlock(pdfium::make_span(buffer).first(block_size)))
return false;
src_size -= block_size;
}
diff --git a/core/fpdfapi/parser/cpdf_seekablemultistream.cpp b/core/fpdfapi/parser/cpdf_seekablemultistream.cpp
index 50571d3..bad6d97 100644
--- a/core/fpdfapi/parser/cpdf_seekablemultistream.cpp
+++ b/core/fpdfapi/parser/cpdf_seekablemultistream.cpp
@@ -78,9 +78,9 @@
return false;
}
-bool CPDF_SeekableMultiStream::WriteBlockAtOffset(const void* pData,
- FX_FILESIZE offset,
- size_t size) {
+bool CPDF_SeekableMultiStream::WriteBlockAtOffset(
+ pdfium::span<const uint8_t> buffer,
+ FX_FILESIZE offset) {
NOTREACHED();
return false;
}
diff --git a/core/fpdfapi/parser/cpdf_seekablemultistream.h b/core/fpdfapi/parser/cpdf_seekablemultistream.h
index a66194a..fc659a6 100644
--- a/core/fpdfapi/parser/cpdf_seekablemultistream.h
+++ b/core/fpdfapi/parser/cpdf_seekablemultistream.h
@@ -21,17 +21,16 @@
std::vector<RetainPtr<const CPDF_Stream>> streams);
~CPDF_SeekableMultiStream() override;
- // IFX_SeekableReadStream
+ // IFX_SeekableReadStream:
FX_FILESIZE GetPosition() override;
FX_FILESIZE GetSize() override;
+ bool IsEOF() override;
+ size_t ReadBlock(pdfium::span<uint8_t> buffer) override;
bool ReadBlockAtOffset(pdfium::span<uint8_t> buffer,
FX_FILESIZE offset) override;
- size_t ReadBlock(pdfium::span<uint8_t> buffer) override;
- bool IsEOF() override;
+ bool WriteBlockAtOffset(pdfium::span<const uint8_t> buffer,
+ FX_FILESIZE offset) override;
bool Flush() override;
- bool WriteBlockAtOffset(const void* pData,
- FX_FILESIZE offset,
- size_t size) override;
private:
std::vector<RetainPtr<CPDF_StreamAcc>> m_Data;
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index 9d9c0e3..89a34c9 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -174,7 +174,7 @@
if (!archive->WriteString("stream\r\n"))
return false;
- if (!archive->WriteSpan(data))
+ if (!archive->WriteBlock(data))
return false;
return archive->WriteString("\r\nendstream");
diff --git a/core/fxcrt/cfx_memorystream.cpp b/core/fxcrt/cfx_memorystream.cpp
index 7d05992..32bb360 100644
--- a/core/fxcrt/cfx_memorystream.cpp
+++ b/core/fxcrt/cfx_memorystream.cpp
@@ -67,17 +67,15 @@
return nRead;
}
-bool CFX_MemoryStream::WriteBlockAtOffset(const void* buffer,
- FX_FILESIZE offset,
- size_t size) {
+bool CFX_MemoryStream::WriteBlockAtOffset(pdfium::span<const uint8_t> buffer,
+ FX_FILESIZE offset) {
if (offset < 0)
return false;
- if (size == 0)
+ if (buffer.empty())
return true;
- DCHECK(buffer);
- FX_SAFE_SIZE_T safe_new_pos = size;
+ FX_SAFE_SIZE_T safe_new_pos = buffer.size();
safe_new_pos += offset;
if (!safe_new_pos.IsValid())
return false;
@@ -100,7 +98,7 @@
// Safe to cast `offset` because it was used to calculate `safe_new_pos`
// above, and `safe_new_pos` is valid.
fxcrt::spancpy(pdfium::make_span(m_data).subspan(static_cast<size_t>(offset)),
- pdfium::make_span(static_cast<const uint8_t*>(buffer), size));
+ buffer);
m_nCurSize = std::max(m_nCurSize, m_nCurPos);
return true;
diff --git a/core/fxcrt/cfx_memorystream.h b/core/fxcrt/cfx_memorystream.h
index 858efa0..5ecf995 100644
--- a/core/fxcrt/cfx_memorystream.h
+++ b/core/fxcrt/cfx_memorystream.h
@@ -20,12 +20,11 @@
FX_FILESIZE GetSize() override;
FX_FILESIZE GetPosition() override;
bool IsEOF() override;
+ size_t ReadBlock(pdfium::span<uint8_t> buffer) override;
bool ReadBlockAtOffset(pdfium::span<uint8_t> buffer,
FX_FILESIZE offset) override;
- size_t ReadBlock(pdfium::span<uint8_t> buffer) override;
- bool WriteBlockAtOffset(const void* buffer,
- FX_FILESIZE offset,
- size_t size) override;
+ bool WriteBlockAtOffset(pdfium::span<const uint8_t> buffer,
+ FX_FILESIZE offset) override;
bool Flush() override;
pdfium::span<const uint8_t> GetSpan() const;
diff --git a/core/fxcrt/cfx_memorystream_unittest.cpp b/core/fxcrt/cfx_memorystream_unittest.cpp
index 445e1c9..88b0e25 100644
--- a/core/fxcrt/cfx_memorystream_unittest.cpp
+++ b/core/fxcrt/cfx_memorystream_unittest.cpp
@@ -17,27 +17,29 @@
TEST(CFXMemoryStreamTest, SparseBlockWrites) {
auto stream = pdfium::MakeRetain<CFX_MemoryStream>();
- for (FX_FILESIZE offset = 0; offset <= 200000; offset += 100000)
- stream->WriteBlockAtOffset(kSomeText, offset, kSomeTextLen);
-
+ for (FX_FILESIZE offset = 0; offset <= 200000; offset += 100000) {
+ stream->WriteBlockAtOffset(
+ {reinterpret_cast<const uint8_t*>(kSomeText), kSomeTextLen}, offset);
+ }
EXPECT_EQ(200000 + kSomeTextLen, static_cast<size_t>(stream->GetSize()));
}
TEST(CFXMemoryStreamTest, OverlappingBlockWrites) {
auto stream = pdfium::MakeRetain<CFX_MemoryStream>();
- for (FX_FILESIZE offset = 0; offset <= 100; ++offset)
- stream->WriteBlockAtOffset(kSomeText, offset, kSomeTextLen);
-
+ for (FX_FILESIZE offset = 0; offset <= 100; ++offset) {
+ stream->WriteBlockAtOffset(
+ {reinterpret_cast<const uint8_t*>(kSomeText), kSomeTextLen}, offset);
+ }
EXPECT_EQ(100 + kSomeTextLen, static_cast<size_t>(stream->GetSize()));
}
TEST(CFXMemoryStreamTest, ReadWriteBlockAtOffset) {
auto stream = pdfium::MakeRetain<CFX_MemoryStream>();
const uint8_t kData1[] = {'a', 'b', 'c'};
- ASSERT_TRUE(stream->WriteBlock(kData1, sizeof(kData1)));
+ ASSERT_TRUE(stream->WriteBlock(kData1));
ASSERT_THAT(stream->GetSpan(), testing::ElementsAre('a', 'b', 'c'));
- ASSERT_TRUE(stream->WriteBlockAtOffset(kData1, 5, sizeof(kData1)));
+ ASSERT_TRUE(stream->WriteBlockAtOffset(kData1, 5));
ASSERT_THAT(stream->GetSpan(),
testing::ElementsAre('a', 'b', 'c', '\0', '\0', 'a', 'b', 'c'));
@@ -49,12 +51,9 @@
TEST(CFXMemoryStreamTest, WriteZeroBytes) {
auto stream = pdfium::MakeRetain<CFX_MemoryStream>();
const uint8_t kData1[] = {'a', 'b', 'c'};
- ASSERT_TRUE(stream->WriteBlock(kData1, sizeof(kData1)));
+ ASSERT_TRUE(stream->WriteBlock(kData1));
ASSERT_THAT(stream->GetSpan(), testing::ElementsAre('a', 'b', 'c'));
- ASSERT_TRUE(stream->WriteBlock(kData1, 0));
- ASSERT_THAT(stream->GetSpan(), testing::ElementsAre('a', 'b', 'c'));
-
- ASSERT_TRUE(stream->WriteBlock(nullptr, 0));
+ ASSERT_TRUE(stream->WriteBlock({}));
ASSERT_THAT(stream->GetSpan(), testing::ElementsAre('a', 'b', 'c'));
}
diff --git a/core/fxcrt/fx_stream.cpp b/core/fxcrt/fx_stream.cpp
index 31ddbf8..1ceb539 100644
--- a/core/fxcrt/fx_stream.cpp
+++ b/core/fxcrt/fx_stream.cpp
@@ -28,10 +28,9 @@
size_t ReadBlock(pdfium::span<uint8_t> buffer) override {
return m_pFile->Read(buffer.data(), buffer.size());
}
- bool WriteBlockAtOffset(const void* buffer,
- FX_FILESIZE offset,
- size_t size) override {
- return !!m_pFile->WritePos(buffer, size, offset);
+ bool WriteBlockAtOffset(pdfium::span<const uint8_t> buffer,
+ FX_FILESIZE offset) override {
+ return !!m_pFile->WritePos(buffer.data(), buffer.size(), offset);
}
bool Flush() override { return m_pFile->Flush(); }
@@ -45,28 +44,24 @@
} // namespace
-bool IFX_WriteStream::WriteSpan(pdfium::span<const uint8_t> data) {
- return WriteBlock(data.data(), data.size());
-}
-
bool IFX_WriteStream::WriteString(ByteStringView str) {
- return WriteBlock(str.unterminated_c_str(), str.GetLength());
+ return WriteBlock(str.raw_span());
}
bool IFX_WriteStream::WriteByte(uint8_t byte) {
- return WriteBlock(&byte, 1);
+ return WriteBlock({&byte, 1});
}
bool IFX_WriteStream::WriteDWord(uint32_t i) {
char buf[20] = {};
FXSYS_itoa(i, buf, 10);
- return WriteBlock(buf, strlen(buf));
+ return WriteBlock({reinterpret_cast<uint8_t*>(buf), strlen(buf)});
}
bool IFX_WriteStream::WriteFilesize(FX_FILESIZE size) {
char buf[20] = {};
FXSYS_i64toa(size, buf, 10);
- return WriteBlock(buf, strlen(buf));
+ return WriteBlock({reinterpret_cast<uint8_t*>(buf), strlen(buf)});
}
// static
@@ -78,8 +73,8 @@
return pdfium::MakeRetain<CFX_CRTFileStream>(std::move(pFA));
}
-bool IFX_SeekableWriteStream::WriteBlock(const void* pData, size_t size) {
- return WriteBlockAtOffset(pData, GetSize(), size);
+bool IFX_SeekableWriteStream::WriteBlock(pdfium::span<const uint8_t> buffer) {
+ return WriteBlockAtOffset(buffer, GetSize());
}
bool IFX_SeekableReadStream::IsEOF() {
@@ -94,6 +89,6 @@
return 0;
}
-bool IFX_SeekableStream::WriteBlock(const void* buffer, size_t size) {
- return WriteBlockAtOffset(buffer, GetSize(), size);
+bool IFX_SeekableStream::WriteBlock(pdfium::span<const uint8_t> buffer) {
+ return WriteBlockAtOffset(buffer, GetSize());
}
diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h
index a2a04f2..46d7de9 100644
--- a/core/fxcrt/fx_stream.h
+++ b/core/fxcrt/fx_stream.h
@@ -17,11 +17,9 @@
class IFX_WriteStream {
public:
- // When `size` is 0, treat it as a no-op and return true. That is also the
- // only time when `pData` can be null.
- virtual bool WriteBlock(const void* pData, size_t size) = 0;
+ // When `size` is 0, treat it as a no-op and return true.
+ virtual bool WriteBlock(pdfium::span<const uint8_t> data) = 0;
- bool WriteSpan(pdfium::span<const uint8_t> data);
bool WriteString(ByteStringView str);
bool WriteByte(uint8_t byte);
bool WriteDWord(uint32_t i);
@@ -48,12 +46,11 @@
public IFX_RetainableWriteStream {
public:
// IFX_WriteStream:
- bool WriteBlock(const void* pData, size_t size) override;
+ bool WriteBlock(pdfium::span<const uint8_t> data) override;
virtual bool Flush() = 0;
- virtual bool WriteBlockAtOffset(const void* pData,
- FX_FILESIZE offset,
- size_t size) = 0;
+ virtual bool WriteBlockAtOffset(pdfium::span<const uint8_t> data,
+ FX_FILESIZE offset) = 0;
};
class IFX_SeekableReadStream : virtual public Retainable,
@@ -73,7 +70,7 @@
public IFX_SeekableWriteStream {
public:
// IFX_SeekableWriteStream:
- bool WriteBlock(const void* buffer, size_t size) override;
+ bool WriteBlock(pdfium::span<const uint8_t> buffer) override;
};
#endif // CORE_FXCRT_FX_STREAM_H_
diff --git a/core/fxge/win32/cfx_psrenderer.cpp b/core/fxge/win32/cfx_psrenderer.cpp
index ddbc245..8f15ce4 100644
--- a/core/fxge/win32/cfx_psrenderer.cpp
+++ b/core/fxge/win32/cfx_psrenderer.cpp
@@ -276,15 +276,16 @@
// Flush `m_PreambleOutput` if it is not empty.
std::streamoff preamble_pos = m_PreambleOutput.tellp();
if (preamble_pos > 0) {
- m_pStream->WriteBlock(m_PreambleOutput.str().c_str(),
- pdfium::base::checked_cast<size_t>(preamble_pos));
+ m_pStream->WriteBlock(
+ {reinterpret_cast<const uint8_t*>(m_PreambleOutput.str().c_str()),
+ pdfium::base::checked_cast<size_t>(preamble_pos)});
m_PreambleOutput.str("");
}
// Flush `m_Output`. It's never empty because of the WriteString() call above.
m_pStream->WriteBlock(
- m_Output.str().c_str(),
- pdfium::base::checked_cast<size_t>(std::streamoff(m_Output.tellp())));
+ {reinterpret_cast<const uint8_t*>(m_Output.str().c_str()),
+ pdfium::base::checked_cast<size_t>(std::streamoff(m_Output.tellp()))});
m_Output.str("");
}
diff --git a/core/fxge/win32/cfx_psrenderer_unittest.cpp b/core/fxge/win32/cfx_psrenderer_unittest.cpp
index 1389507..81430df 100644
--- a/core/fxge/win32/cfx_psrenderer_unittest.cpp
+++ b/core/fxge/win32/cfx_psrenderer_unittest.cpp
@@ -27,9 +27,8 @@
CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_RetainableWriteStream:
- bool WriteBlock(const void* pData, size_t size) override {
- const uint8_t* data_as_uint8 = static_cast<const uint8_t*>(pData);
- data_.insert(data_.end(), data_as_uint8, data_as_uint8 + size);
+ bool WriteBlock(pdfium::span<const uint8_t> buffer) override {
+ data_.insert(data_.end(), buffer.begin(), buffer.end());
return true;
}
diff --git a/core/fxge/win32/cpsoutput.cpp b/core/fxge/win32/cpsoutput.cpp
index 6f349c4..763a4e5 100644
--- a/core/fxge/win32/cpsoutput.cpp
+++ b/core/fxge/win32/cpsoutput.cpp
@@ -15,14 +15,12 @@
CPSOutput::~CPSOutput() = default;
-bool CPSOutput::WriteBlock(const void* str, size_t len) {
- pdfium::span<const uint8_t> input(static_cast<const uint8_t*>(str), len);
+bool CPSOutput::WriteBlock(pdfium::span<const uint8_t> input) {
while (!input.empty()) {
uint8_t buffer[1026];
size_t send_len = std::min<size_t>(input.size(), 1024);
*(reinterpret_cast<uint16_t*>(buffer)) = static_cast<uint16_t>(send_len);
memcpy(buffer + 2, input.data(), send_len);
-
switch (m_mode) {
case OutputMode::kExtEscape:
ExtEscape(m_hDC, PASSTHROUGH, static_cast<int>(send_len + 2),
diff --git a/core/fxge/win32/cpsoutput.h b/core/fxge/win32/cpsoutput.h
index 62ac7c0..efb93ce 100644
--- a/core/fxge/win32/cpsoutput.h
+++ b/core/fxge/win32/cpsoutput.h
@@ -20,7 +20,7 @@
~CPSOutput() override;
// IFX_Writestream:
- bool WriteBlock(const void* str, size_t len) override;
+ bool WriteBlock(pdfium::span<const uint8_t> input) override;
private:
const HDC m_hDC;
diff --git a/fpdfsdk/cpdfsdk_filewriteadapter.cpp b/fpdfsdk/cpdfsdk_filewriteadapter.cpp
index 5d138d6..776c8de 100644
--- a/fpdfsdk/cpdfsdk_filewriteadapter.cpp
+++ b/fpdfsdk/cpdfsdk_filewriteadapter.cpp
@@ -16,8 +16,8 @@
CPDFSDK_FileWriteAdapter::~CPDFSDK_FileWriteAdapter() = default;
-bool CPDFSDK_FileWriteAdapter::WriteBlock(const void* data, size_t size) {
+bool CPDFSDK_FileWriteAdapter::WriteBlock(pdfium::span<const uint8_t> buffer) {
return file_write_->WriteBlock(
- file_write_, data,
- pdfium::base::checked_cast<unsigned long>(size)) != 0;
+ file_write_, buffer.data(),
+ pdfium::base::checked_cast<unsigned long>(buffer.size())) != 0;
}
diff --git a/fpdfsdk/cpdfsdk_filewriteadapter.h b/fpdfsdk/cpdfsdk_filewriteadapter.h
index 0b210b5..477ec90 100644
--- a/fpdfsdk/cpdfsdk_filewriteadapter.h
+++ b/fpdfsdk/cpdfsdk_filewriteadapter.h
@@ -17,7 +17,7 @@
CONSTRUCT_VIA_MAKE_RETAIN;
// IFX_WriteStream:
- bool WriteBlock(const void* data, size_t size) override;
+ bool WriteBlock(pdfium::span<const uint8_t> buffer) override;
private:
explicit CPDFSDK_FileWriteAdapter(FPDF_FILEWRITE* file_write);
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp
index 3727b28..f43b692 100644
--- a/fpdfsdk/cpdfsdk_helpers.cpp
+++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -82,14 +82,13 @@
// IFX_SeekableStream:
FX_FILESIZE GetSize() override;
- bool IsEOF() override;
FX_FILESIZE GetPosition() override;
+ bool IsEOF() override;
+ size_t ReadBlock(pdfium::span<uint8_t> buffer) override;
bool ReadBlockAtOffset(pdfium::span<uint8_t> buffer,
FX_FILESIZE offset) override;
- size_t ReadBlock(pdfium::span<uint8_t> buffer) override;
- bool WriteBlockAtOffset(const void* buffer,
- FX_FILESIZE offset,
- size_t size) override;
+ bool WriteBlockAtOffset(pdfium::span<const uint8_t> buffer,
+ FX_FILESIZE offset) override;
bool Flush() override;
void SetPosition(FX_FILESIZE pos) { m_nCurPos = pos; }
@@ -158,15 +157,16 @@
return 0;
}
-bool FPDF_FileHandlerContext::WriteBlockAtOffset(const void* buffer,
- FX_FILESIZE offset,
- size_t size) {
+bool FPDF_FileHandlerContext::WriteBlockAtOffset(
+ pdfium::span<const uint8_t> buffer,
+ FX_FILESIZE offset) {
if (!m_pFS || !m_pFS->WriteBlock)
return false;
- if (m_pFS->WriteBlock(m_pFS->clientData, (FPDF_DWORD)offset, buffer,
- (FPDF_DWORD)size) == 0) {
- m_nCurPos = offset + size;
+ if (m_pFS->WriteBlock(m_pFS->clientData, static_cast<FPDF_DWORD>(offset),
+ buffer.data(),
+ static_cast<FPDF_DWORD>(buffer.size())) == 0) {
+ m_nCurPos = offset + buffer.size();
return true;
}
return false;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index e2721fb..ca71694 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -514,7 +514,7 @@
}
auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(std::move(pStream));
pAcc->LoadAllDataFiltered();
- fileWrite->WriteSpan(pAcc->GetSpan());
+ fileWrite->WriteBlock(pAcc->GetSpan());
}
}
fileWrite->Flush();
diff --git a/testing/string_write_stream.cpp b/testing/string_write_stream.cpp
index 334ff93..1a99d9a 100644
--- a/testing/string_write_stream.cpp
+++ b/testing/string_write_stream.cpp
@@ -11,7 +11,7 @@
StringWriteStream::~StringWriteStream() = default;
-bool StringWriteStream::WriteBlock(const void* pData, size_t size) {
- stream_.write(static_cast<const char*>(pData), size);
+bool StringWriteStream::WriteBlock(pdfium::span<const uint8_t> buffer) {
+ stream_.write(reinterpret_cast<const char*>(buffer.data()), buffer.size());
return true;
}
diff --git a/testing/string_write_stream.h b/testing/string_write_stream.h
index 747b96e..fc4dc02 100644
--- a/testing/string_write_stream.h
+++ b/testing/string_write_stream.h
@@ -16,7 +16,7 @@
~StringWriteStream() override;
// IFX_WriteStream:
- bool WriteBlock(const void* pData, size_t size) override;
+ bool WriteBlock(pdfium::span<const uint8_t> buffer) override;
std::string ToString() const { return stream_.str(); }