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)));
}