Chromium Code Reviews| 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.
|