From de7c9620c37486413e1f7db4567b4b0cea6a857f Mon Sep 17 00:00:00 2001 From: Artem Strygin Date: Tue, 1 Aug 2017 14:49:46 +0300 Subject: Prevent use of null pFileRead in CPDF_DataAvail. Change-Id: I52e668ca410a0c6b96a789ecc18c993152047ead Reviewed-on: https://pdfium-review.googlesource.com/9550 Commit-Queue: Art Snake Reviewed-by: Lei Zhang --- core/fpdfapi/parser/cpdf_data_avail.cpp | 38 ++++++++++----------------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp index bc81e991ca..88755a9eb7 100644 --- a/core/fpdfapi/parser/cpdf_data_avail.cpp +++ b/core/fpdfapi/parser/cpdf_data_avail.cpp @@ -57,17 +57,12 @@ class HintsAssigner { HintsAssigner(CPDF_ReadValidator* validator, CPDF_DataAvail::DownloadHints* hints) : validator_(validator) { - if (validator_) { - validator_->ResetErrors(); - validator_->SetDownloadHints(hints); - } + ASSERT(validator_); + validator_->ResetErrors(); + validator_->SetDownloadHints(hints); } - ~HintsAssigner() { - if (validator_) { - validator_->SetDownloadHints(nullptr); - } - } + ~HintsAssigner() { validator_->SetDownloadHints(nullptr); } private: CFX_UnownedPtr validator_; @@ -83,16 +78,11 @@ CPDF_DataAvail::CPDF_DataAvail( FileAvail* pFileAvail, const CFX_RetainPtr& pFileRead, bool bSupportHintTable) - : m_pFileAvail(pFileAvail), - m_pFileRead( - pFileRead - ? pdfium::MakeRetain(pFileRead, m_pFileAvail) - : nullptr) { + : m_pFileAvail(pFileAvail) { + ASSERT(pFileRead); + m_pFileRead = pdfium::MakeRetain(pFileRead, m_pFileAvail); m_Pos = 0; - m_dwFileLen = 0; - if (m_pFileRead) { - m_dwFileLen = (uint32_t)m_pFileRead->GetSize(); - } + m_dwFileLen = m_pFileRead->GetSize(); m_dwCurrentOffset = 0; m_dwXRefOffset = 0; m_dwTrailerOffset = 0; @@ -237,13 +227,10 @@ bool CPDF_DataAvail::AreObjectsAvailable(std::vector& obj_array, CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsDocAvail( DownloadHints* pHints) { - const HintsAssigner hints_assigner(m_pFileRead.Get(), pHints); + if (!m_dwFileLen) + return DataError; - if (!m_dwFileLen && m_pFileRead) { - m_dwFileLen = (uint32_t)m_pFileRead->GetSize(); - if (!m_dwFileLen) - return DataError; - } + const HintsAssigner hints_assigner(m_pFileRead.Get(), pHints); while (!m_bDocAvail) { if (!CheckDocStatus(pHints)) @@ -744,9 +731,6 @@ CPDF_DataAvail::DocLinearizationStatus CPDF_DataAvail::IsLinearizedPDF() { if (!m_pFileAvail->IsDataAvail(0, kReqSize)) return LinearizationUnknown; - if (!m_pFileRead) - return NotLinearized; - FX_FILESIZE dwSize = m_pFileRead->GetSize(); if (dwSize < (FX_FILESIZE)kReqSize) return LinearizationUnknown; -- cgit v1.2.3