Unify CPDF_DataAvail::CheckCrossRef.
Use read validator to check cross ref table availability
Change-Id: I050c366a255598ca6d8bcd353afa94c4a09c33a9
Reviewed-on: https://pdfium-review.googlesource.com/11730
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index 24ba2e2..234a5a0 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -58,7 +58,6 @@
CPDF_DataAvail::DownloadHints* hints)
: validator_(validator) {
ASSERT(validator_);
- validator_->ResetErrors();
validator_->SetDownloadHints(hints);
}
@@ -272,7 +271,7 @@
case PDF_DATAAVAIL_END:
return CheckEnd();
case PDF_DATAAVAIL_CROSSREF:
- return CheckCrossRef(pHints);
+ return CheckCrossRef();
case PDF_DATAAVAIL_CROSSREF_ITEM:
return CheckCrossRefItem();
case PDF_DATAAVAIL_TRAILER:
@@ -890,8 +889,9 @@
bool CPDF_DataAvail::CheckCrossRefItem() {
CFX_ByteString token;
while (1) {
+ const CPDF_ReadValidator::Session read_session(GetValidator().Get());
if (!GetNextToken(&token)) {
- if (!m_pFileRead->has_read_problems())
+ if (!GetValidator()->has_read_problems())
m_docStatus = PDF_DATAAVAIL_ERROR;
return false;
}
@@ -904,13 +904,12 @@
}
}
-bool CPDF_DataAvail::CheckCrossRef(DownloadHints* pHints) {
- int32_t iSize = 0;
+bool CPDF_DataAvail::CheckCrossRef() {
+ const CPDF_ReadValidator::Session read_session(GetValidator().Get());
CFX_ByteString token;
if (!GetNextToken(&token)) {
- iSize = static_cast<int32_t>(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos
- : 512);
- pHints->AddSegment(m_Pos, iSize);
+ if (!GetValidator()->has_read_problems())
+ m_docStatus = PDF_DATAAVAIL_ERROR;
return false;
}
diff --git a/core/fpdfapi/parser/cpdf_data_avail.h b/core/fpdfapi/parser/cpdf_data_avail.h
index db134dd..e704e12 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.h
+++ b/core/fpdfapi/parser/cpdf_data_avail.h
@@ -133,7 +133,7 @@
bool CheckFirstPage(DownloadHints* pHints);
bool CheckHintTables(DownloadHints* pHints);
bool CheckEnd();
- bool CheckCrossRef(DownloadHints* pHints);
+ bool CheckCrossRef();
bool CheckCrossRefItem();
bool CheckTrailer(DownloadHints* pHints);
bool CheckRoot();