summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_data_avail.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/parser/cpdf_data_avail.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_data_avail.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index 93e4472d94..d298fb7249 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -270,7 +270,7 @@ bool CPDF_DataAvail::CheckDocStatus(DownloadHints* pHints) {
case PDF_DATAAVAIL_HINTTABLE:
return CheckHintTables(pHints);
case PDF_DATAAVAIL_END:
- return CheckEnd(pHints);
+ return CheckEnd();
case PDF_DATAAVAIL_CROSSREF:
return CheckCrossRef(pHints);
case PDF_DATAAVAIL_CROSSREF_ITEM:
@@ -743,16 +743,17 @@ bool CPDF_DataAvail::IsLinearizedFile(uint8_t* pData, uint32_t dwLen) {
return true;
}
-bool CPDF_DataAvail::CheckEnd(DownloadHints* pHints) {
- uint32_t req_pos = (uint32_t)(m_dwFileLen > 1024 ? m_dwFileLen - 1024 : 0);
- uint32_t dwSize = (uint32_t)(m_dwFileLen - req_pos);
- if (!m_pFileAvail->IsDataAvail(req_pos, dwSize)) {
- pHints->AddSegment(req_pos, dwSize);
- return false;
- }
-
+bool CPDF_DataAvail::CheckEnd() {
+ const uint32_t req_pos =
+ (uint32_t)(m_dwFileLen > 1024 ? m_dwFileLen - 1024 : 0);
+ const uint32_t dwSize = (uint32_t)(m_dwFileLen - req_pos);
std::vector<uint8_t> buffer(dwSize);
- m_pFileRead->ReadBlock(buffer.data(), req_pos, dwSize);
+ {
+ const CPDF_ReadValidator::Session read_session(GetValidator().Get());
+ m_pFileRead->ReadBlock(buffer.data(), req_pos, dwSize);
+ if (GetValidator()->has_read_problems())
+ return false;
+ }
auto file = pdfium::MakeRetain<CFX_MemoryStream>(
buffer.data(), static_cast<size_t>(dwSize), false);