Index: core/fpdfapi/parser/cpdf_data_avail.cpp |
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp |
index 3fe4b03da62012ae33d8cbf50944708e5572224f..4df1a140e7a683254b9b93af8dc1eafedbe3796e 100644 |
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp |
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp |
@@ -957,7 +957,9 @@ bool CPDF_DataAvail::GetNextChar(uint8_t& ch) { |
if ((FX_FILESIZE)(read_pos + read_size) > m_dwFileLen) |
read_pos = m_dwFileLen - read_size; |
- if (!m_pFileRead->ReadBlock(m_bufferData, read_pos, read_size)) |
+ if (m_pFileRead->ReadBlock(m_bufferData, read_pos, read_size) != |
+ read_size && |
+ !m_pFileRead->IsEOF()) |
return false; |
m_bufferOffset = read_pos; |
@@ -1062,7 +1064,8 @@ bool CPDF_DataAvail::CheckTrailer(DownloadHints* pHints) { |
int32_t iTrailerSize = |
(int32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512); |
if (m_pFileAvail->IsDataAvail(m_Pos, iTrailerSize)) { |
- int32_t iSize = (int32_t)(m_Pos + iTrailerSize - m_dwTrailerOffset); |
+ uint32_t iSize = pdfium::base::checked_cast<uint32_t>(m_Pos + iTrailerSize - |
+ m_dwTrailerOffset); |
CFX_BinaryBuf buf(iSize); |
uint8_t* pBuf = buf.GetBuffer(); |
if (!pBuf) { |
@@ -1070,7 +1073,8 @@ bool CPDF_DataAvail::CheckTrailer(DownloadHints* pHints) { |
return false; |
} |
- if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize)) |
+ if (m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize) != iSize && |
+ !m_pFileRead->IsEOF()) |
return false; |
ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, false)); |
Tom Sepez
2016/11/14 20:27:40
same issue here with reads < isize.
|