Use more spans in streams, part 2. Change-Id: I5065b6961eab046537e04219be7317ac5e75d0d2 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/100531 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_seekablemultistream.cpp b/core/fpdfapi/parser/cpdf_seekablemultistream.cpp index c99d079..50571d3 100644 --- a/core/fpdfapi/parser/cpdf_seekablemultistream.cpp +++ b/core/fpdfapi/parser/cpdf_seekablemultistream.cpp
@@ -60,7 +60,7 @@ return false; } -size_t CPDF_SeekableMultiStream::ReadBlock(void* buffer, size_t size) { +size_t CPDF_SeekableMultiStream::ReadBlock(pdfium::span<uint8_t> buffer) { NOTREACHED(); return 0; }
diff --git a/core/fpdfapi/parser/cpdf_seekablemultistream.h b/core/fpdfapi/parser/cpdf_seekablemultistream.h index 30d62d8..a66194a 100644 --- a/core/fpdfapi/parser/cpdf_seekablemultistream.h +++ b/core/fpdfapi/parser/cpdf_seekablemultistream.h
@@ -26,7 +26,7 @@ FX_FILESIZE GetSize() override; bool ReadBlockAtOffset(pdfium::span<uint8_t> buffer, FX_FILESIZE offset) override; - size_t ReadBlock(void* buffer, size_t size) override; + size_t ReadBlock(pdfium::span<uint8_t> buffer) override; bool IsEOF() override; bool Flush() override; bool WriteBlockAtOffset(const void* pData,
diff --git a/core/fxcrt/cfx_memorystream.cpp b/core/fxcrt/cfx_memorystream.cpp index b88c7bc..7d05992 100644 --- a/core/fxcrt/cfx_memorystream.cpp +++ b/core/fxcrt/cfx_memorystream.cpp
@@ -56,15 +56,14 @@ return true; } -size_t CFX_MemoryStream::ReadBlock(void* buffer, size_t size) { +size_t CFX_MemoryStream::ReadBlock(pdfium::span<uint8_t> buffer) { if (m_nCurPos >= m_nCurSize) return 0; - size_t nRead = std::min(size, m_nCurSize - m_nCurPos); - if (!ReadBlockAtOffset({static_cast<uint8_t*>(buffer), nRead}, - static_cast<int32_t>(m_nCurPos))) { + size_t nRead = std::min(buffer.size(), m_nCurSize - m_nCurPos); + if (!ReadBlockAtOffset(buffer.first(nRead), static_cast<int32_t>(m_nCurPos))) return 0; - } + return nRead; }
diff --git a/core/fxcrt/cfx_memorystream.h b/core/fxcrt/cfx_memorystream.h index b1bbefa..858efa0 100644 --- a/core/fxcrt/cfx_memorystream.h +++ b/core/fxcrt/cfx_memorystream.h
@@ -22,7 +22,7 @@ bool IsEOF() override; bool ReadBlockAtOffset(pdfium::span<uint8_t> buffer, FX_FILESIZE offset) override; - size_t ReadBlock(void* buffer, size_t size) override; + size_t ReadBlock(pdfium::span<uint8_t> buffer) override; bool WriteBlockAtOffset(const void* buffer, FX_FILESIZE offset, size_t size) override;
diff --git a/core/fxcrt/fx_stream.cpp b/core/fxcrt/fx_stream.cpp index b593906..31ddbf8 100644 --- a/core/fxcrt/fx_stream.cpp +++ b/core/fxcrt/fx_stream.cpp
@@ -25,8 +25,8 @@ FX_FILESIZE offset) override { return m_pFile->ReadPos(buffer.data(), buffer.size(), offset) > 0; } - size_t ReadBlock(void* buffer, size_t size) override { - return m_pFile->Read(buffer, size); + 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, @@ -90,7 +90,7 @@ return 0; } -size_t IFX_SeekableReadStream::ReadBlock(void* buffer, size_t size) { +size_t IFX_SeekableReadStream::ReadBlock(pdfium::span<uint8_t> buffer) { return 0; }
diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h index 290f06a..a2a04f2 100644 --- a/core/fxcrt/fx_stream.h +++ b/core/fxcrt/fx_stream.h
@@ -64,8 +64,7 @@ virtual bool IsEOF(); virtual FX_FILESIZE GetPosition(); - virtual size_t ReadBlock(void* buffer, size_t size); - + [[nodiscard]] virtual size_t ReadBlock(pdfium::span<uint8_t> buffer); [[nodiscard]] virtual bool ReadBlockAtOffset(pdfium::span<uint8_t> buffer, FX_FILESIZE offset) = 0; };
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp index 584a0b6..3727b28 100644 --- a/fpdfsdk/cpdfsdk_helpers.cpp +++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -86,7 +86,7 @@ FX_FILESIZE GetPosition() override; bool ReadBlockAtOffset(pdfium::span<uint8_t> buffer, FX_FILESIZE offset) override; - size_t ReadBlock(void* buffer, size_t size) override; + size_t ReadBlock(pdfium::span<uint8_t> buffer) override; bool WriteBlockAtOffset(const void* buffer, FX_FILESIZE offset, size_t size) override; @@ -138,20 +138,21 @@ return false; } -size_t FPDF_FileHandlerContext::ReadBlock(void* buffer, size_t size) { - if (!buffer || !size || !m_pFS->ReadBlock) +size_t FPDF_FileHandlerContext::ReadBlock(pdfium::span<uint8_t> buffer) { + if (buffer.empty() || !m_pFS->ReadBlock) return 0; FX_FILESIZE nSize = GetSize(); if (m_nCurPos >= nSize) return 0; FX_FILESIZE dwAvail = nSize - m_nCurPos; - if (dwAvail < (FX_FILESIZE)size) - size = static_cast<size_t>(dwAvail); - if (m_pFS->ReadBlock(m_pFS->clientData, (FPDF_DWORD)m_nCurPos, buffer, - (FPDF_DWORD)size) == 0) { - m_nCurPos += size; - return size; + if (dwAvail < (FX_FILESIZE)buffer.size()) + buffer = buffer.first(static_cast<size_t>(dwAvail)); + if (m_pFS->ReadBlock(m_pFS->clientData, static_cast<FPDF_DWORD>(m_nCurPos), + buffer.data(), + static_cast<FPDF_DWORD>(buffer.size())) == 0) { + m_nCurPos += buffer.size(); + return buffer.size(); } return 0;
diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp index 0f2fff2..4fc19d7 100644 --- a/fxjs/xfa/cfxjse_formcalc_context.cpp +++ b/fxjs/xfa/cfxjse_formcalc_context.cpp
@@ -4512,7 +4512,9 @@ FX_FILESIZE size = pFile->GetSize(); DataVector<uint8_t> dataBuf(size); - pFile->ReadBlock(dataBuf.data(), size); + + // TODO(tsepez): check return value? + (void)pFile->ReadBlock(dataBuf); info.GetReturnValue().Set( fxv8::NewStringHelper(info.GetIsolate(), ByteStringView(dataBuf))); }