| Index: core/fxcrt/fx_extension.cpp
|
| diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp
|
| index 0a378f32e5ffaf73184047de79539314064f81f9..4768b1b2f946ac868712127e4c738cd43322a640 100644
|
| --- a/core/fxcrt/fx_extension.cpp
|
| +++ b/core/fxcrt/fx_extension.cpp
|
| @@ -104,31 +104,32 @@ FX_FILESIZE CFX_MemoryStream::GetSize() {
|
| }
|
|
|
| bool CFX_MemoryStream::IsEOF() {
|
| - return m_nCurPos >= (size_t)GetSize();
|
| + return m_nCurPos >= pdfium::base::checked_cast<size_t>(GetSize());
|
| }
|
|
|
| FX_FILESIZE CFX_MemoryStream::GetPosition() {
|
| return (FX_FILESIZE)m_nCurPos;
|
| }
|
|
|
| -bool CFX_MemoryStream::ReadBlock(void* buffer,
|
| - FX_FILESIZE offset,
|
| - size_t size) {
|
| +size_t CFX_MemoryStream::ReadBlock(void* buffer,
|
| + FX_FILESIZE offset,
|
| + size_t size) {
|
| if (!buffer || !size)
|
| - return false;
|
| + return 0;
|
|
|
| FX_SAFE_SIZE_T newPos = size;
|
| newPos += offset;
|
| if (!newPos.IsValid() || newPos.ValueOrDefault(0) == 0 ||
|
| newPos.ValueOrDie() > m_nCurSize) {
|
| - return false;
|
| + return 0;
|
| }
|
|
|
| m_nCurPos = newPos.ValueOrDie();
|
| if (m_dwFlags & FX_MEMSTREAM_Consecutive) {
|
| FXSYS_memcpy(buffer, m_Blocks[0] + (size_t)offset, size);
|
| - return true;
|
| + return size;
|
| }
|
| + size_t readSize = size;
|
| size_t nStartBlock = (size_t)offset / m_nGrowSize;
|
| offset -= (FX_FILESIZE)(nStartBlock * m_nGrowSize);
|
| while (size) {
|
| @@ -142,7 +143,7 @@ bool CFX_MemoryStream::ReadBlock(void* buffer,
|
| nStartBlock++;
|
| offset = 0;
|
| }
|
| - return true;
|
| + return readSize;
|
| }
|
|
|
| size_t CFX_MemoryStream::ReadBlock(void* buffer, size_t size) {
|
| @@ -150,7 +151,7 @@ size_t CFX_MemoryStream::ReadBlock(void* buffer, size_t size) {
|
| return 0;
|
| }
|
| size_t nRead = std::min(size, m_nCurSize - m_nCurPos);
|
| - if (!ReadBlock(buffer, (int32_t)m_nCurPos, nRead)) {
|
| + if (ReadBlock(buffer, (int32_t)m_nCurPos, nRead) != nRead && !IsEOF()) {
|
| return 0;
|
| }
|
| return nRead;
|
| @@ -305,10 +306,10 @@ FX_FILESIZE CFX_CRTFileStream::GetPosition() {
|
| return m_pFile->GetPosition();
|
| }
|
|
|
| -bool CFX_CRTFileStream::ReadBlock(void* buffer,
|
| - FX_FILESIZE offset,
|
| - size_t size) {
|
| - return m_pFile->ReadPos(buffer, size, offset) > 0;
|
| +size_t CFX_CRTFileStream::ReadBlock(void* buffer,
|
| + FX_FILESIZE offset,
|
| + size_t size) {
|
| + return m_pFile->ReadPos(buffer, size, offset);
|
| }
|
|
|
| size_t CFX_CRTFileStream::ReadBlock(void* buffer, size_t size) {
|
|
|