| Index: fpdfsdk/fpdf_dataavail.cpp
|
| diff --git a/fpdfsdk/fpdf_dataavail.cpp b/fpdfsdk/fpdf_dataavail.cpp
|
| index f208a776c4389620b480cbab90f55f462a49dadc..24ab21610a3211c6d859ed81015f2a56156b6e03 100644
|
| --- a/fpdfsdk/fpdf_dataavail.cpp
|
| +++ b/fpdfsdk/fpdf_dataavail.cpp
|
| @@ -11,8 +11,10 @@
|
|
|
| #include "core/fpdfapi/fpdf_parser/include/cpdf_data_avail.h"
|
| #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h"
|
| +#include "core/fxcrt/include/fx_safe_types.h"
|
| #include "fpdfsdk/include/fsdk_define.h"
|
| #include "public/fpdf_formfill.h"
|
| +#include "third_party/base/numerics/safe_conversions_impl.h"
|
|
|
| // These checks are here because core/ and public/ cannot depend on each other.
|
| static_assert(CPDF_DataAvail::DataError == PDF_DATA_ERROR,
|
| @@ -58,23 +60,34 @@ class CFPDF_FileAvailWrap : public CPDF_DataAvail::FileAvail {
|
|
|
| class CFPDF_FileAccessWrap : public IFX_FileRead {
|
| public:
|
| - CFPDF_FileAccessWrap() { m_pFileAccess = nullptr; }
|
| + CFPDF_FileAccessWrap() {
|
| + m_pFileAccess = nullptr;
|
| + m_nCurPos = 0;
|
| + }
|
| ~CFPDF_FileAccessWrap() override {}
|
|
|
| void Set(FPDF_FILEACCESS* pFile) { m_pFileAccess = pFile; }
|
|
|
| + FX_BOOL IsEOF() override {
|
| + return m_nCurPos >=
|
| + pdfium::base::checked_cast<FX_FILESIZE>(m_pFileAccess->m_FileLen);
|
| + }
|
| +
|
| // IFX_FileRead
|
| FX_FILESIZE GetSize() override { return m_pFileAccess->m_FileLen; }
|
|
|
| - FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
|
| - return m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset,
|
| - (uint8_t*)buffer, size);
|
| + size_t ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
|
| + int blockSize = m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset,
|
| + (uint8_t*)buffer, size);
|
| + m_nCurPos = offset + pdfium::base::checked_cast<FX_FILESIZE>(blockSize);
|
| + return pdfium::base::checked_cast<size_t>(blockSize);
|
| }
|
|
|
| void Release() override {}
|
|
|
| private:
|
| FPDF_FILEACCESS* m_pFileAccess;
|
| + FX_FILESIZE m_nCurPos;
|
| };
|
|
|
| class CFPDF_DownloadHintsWrap : public CPDF_DataAvail::DownloadHints {
|
|
|