Index: fpdfsdk/fpdfview.cpp |
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp |
index 334c14cd45f9d1ed834d80b72bc3595c0de775cd..458153a7def2f2a5c4fa06276e819a486ef68bdf 100644 |
--- a/fpdfsdk/fpdfview.cpp |
+++ b/fpdfsdk/fpdfview.cpp |
@@ -120,18 +120,18 @@ FX_FILESIZE CFPDF_FileStream::GetPosition() { |
return m_nCurPos; |
} |
-bool CFPDF_FileStream::ReadBlock(void* buffer, |
- FX_FILESIZE offset, |
- size_t size) { |
+size_t CFPDF_FileStream::ReadBlock(void* buffer, |
+ FX_FILESIZE offset, |
+ size_t size) { |
if (!buffer || !size || !m_pFS->ReadBlock) |
- return false; |
+ return 0; |
if (m_pFS->ReadBlock(m_pFS->clientData, (FPDF_DWORD)offset, buffer, |
(FPDF_DWORD)size) == 0) { |
m_nCurPos = offset + size; |
- return true; |
+ return size; |
} |
- return false; |
+ return 0; |
} |
size_t CFPDF_FileStream::ReadBlock(void* buffer, size_t size) { |
@@ -176,7 +176,7 @@ bool CFPDF_FileStream::Flush() { |
#endif // PDF_ENABLE_XFA |
CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) |
- : m_FileAccess(*pFileAccess) {} |
+ : m_FileAccess(*pFileAccess), m_nCurPos(0) {} |
FX_FILESIZE CPDF_CustomAccess::GetSize() { |
return m_FileAccess.m_FileLen; |
@@ -186,20 +186,26 @@ void CPDF_CustomAccess::Release() { |
delete this; |
} |
-bool CPDF_CustomAccess::ReadBlock(void* buffer, |
- FX_FILESIZE offset, |
- size_t size) { |
- if (offset < 0) |
- return false; |
+bool CPDF_CustomAccess::IsEOF() { |
+ return m_nCurPos >= static_cast<FX_FILESIZE>(m_FileAccess.m_FileLen); |
+} |
- FX_SAFE_FILESIZE newPos = pdfium::base::checked_cast<FX_FILESIZE>(size); |
+size_t CPDF_CustomAccess::ReadBlock(void* buffer, |
+ FX_FILESIZE offset, |
+ size_t size) { |
+ if (offset < 0) { |
+ return 0; |
+ } |
+ FX_SAFE_FILESIZE newPos = |
+ pdfium::base::checked_cast<FX_FILESIZE, size_t>(size); |
newPos += offset; |
if (!newPos.IsValid() || |
newPos.ValueOrDie() > static_cast<FX_FILESIZE>(m_FileAccess.m_FileLen)) { |
- return false; |
+ return 0; |
} |
- return !!m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset, |
- reinterpret_cast<uint8_t*>(buffer), size); |
+ m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset, (uint8_t*)buffer, size); |
Tom Sepez
2016/11/16 18:32:01
We probably still need to check the error status o
|
+ m_nCurPos = newPos.ValueOrDie(); |
+ return size; |
} |
// 0 bit: FPDF_POLICY_MACHINETIME_ACCESS |
@@ -379,21 +385,24 @@ DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) { |
class CMemFile final : public IFX_SeekableReadStream { |
public: |
- CMemFile(uint8_t* pBuf, FX_FILESIZE size) : m_pBuf(pBuf), m_size(size) {} |
+ CMemFile(uint8_t* pBuf, FX_FILESIZE size) |
+ : m_pBuf(pBuf), m_size(size), m_nCurPos(0) {} |
void Release() override { delete this; } |
+ bool IsEOF() override { return m_nCurPos >= m_size; } |
FX_FILESIZE GetSize() override { return m_size; } |
- bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override { |
+ size_t ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override { |
if (offset < 0) { |
- return false; |
+ return 0; |
} |
FX_SAFE_FILESIZE newPos = pdfium::base::checked_cast<FX_FILESIZE>(size); |
newPos += offset; |
if (!newPos.IsValid() || newPos.ValueOrDie() > m_size) { |
- return false; |
+ return 0; |
} |
FXSYS_memcpy(buffer, m_pBuf + offset, size); |
- return true; |
+ m_nCurPos = offset + size; |
+ return size; |
} |
private: |
@@ -401,6 +410,7 @@ class CMemFile final : public IFX_SeekableReadStream { |
uint8_t* const m_pBuf; |
const FX_FILESIZE m_size; |
+ FX_FILESIZE m_nCurPos; |
}; |
DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf, |