Index: fpdfsdk/fpdf_dataavail.cpp |
diff --git a/fpdfsdk/fpdf_dataavail.cpp b/fpdfsdk/fpdf_dataavail.cpp |
index a3accba7662a82fec9ddbd2ac09c32367a9e9ccc..573b225b3f881df25d986f6acb00865a471d9324 100644 |
--- a/fpdfsdk/fpdf_dataavail.cpp |
+++ b/fpdfsdk/fpdf_dataavail.cpp |
@@ -11,8 +11,10 @@ |
#include "core/fpdfapi/parser/cpdf_data_avail.h" |
#include "core/fpdfapi/parser/cpdf_document.h" |
+#include "core/fxcrt/fx_safe_types.h" |
#include "fpdfsdk/fsdk_define.h" |
#include "public/fpdf_formfill.h" |
+#include "third_party/base/numerics/safe_conversions_impl.h" |
#include "third_party/base/ptr_util.h" |
// These checks are here because core/ and public/ cannot depend on each other. |
@@ -59,23 +61,34 @@ class CFPDF_FileAvailWrap : public CPDF_DataAvail::FileAvail { |
class CFPDF_FileAccessWrap : public IFX_SeekableReadStream { |
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; } |
- // IFX_SeekableReadStream |
+ bool IsEOF() override { |
+ return m_nCurPos >= |
+ pdfium::base::checked_cast<FX_FILESIZE>(m_pFileAccess->m_FileLen); |
+ } |
+ |
+ // IFX_FileRead |
Tom Sepez
2016/11/16 18:32:01
nit: now called IFX_SeekableReadStream
|
FX_FILESIZE GetSize() override { return m_pFileAccess->m_FileLen; } |
- 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 { |