| 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..d3d70adbe9731d609a1cde298d0fd3e17dcd2b1c 100644
|
| --- a/core/fpdfapi/parser/cpdf_data_avail.cpp
|
| +++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
|
| @@ -957,11 +957,13 @@ 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))
|
| + uint32_t read_real_size =
|
| + m_pFileRead->ReadBlock(m_bufferData, read_pos, read_size);
|
| + if (read_real_size != read_size && !m_pFileRead->IsEOF())
|
| return false;
|
|
|
| m_bufferOffset = read_pos;
|
| - m_bufferSize = read_size;
|
| + m_bufferSize = read_real_size;
|
| }
|
| ch = m_bufferData[pos - m_bufferOffset];
|
| m_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,10 +1073,11 @@ bool CPDF_DataAvail::CheckTrailer(DownloadHints* pHints) {
|
| return false;
|
| }
|
|
|
| - if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize))
|
| + uint32_t readSize = m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize);
|
| + if (readSize != iSize && !m_pFileRead->IsEOF())
|
| return false;
|
|
|
| - ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, false));
|
| + ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)readSize, false));
|
| m_syntaxParser.InitParser(file.get(), 0);
|
|
|
| std::unique_ptr<CPDF_Object> pTrailer(
|
|
|