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.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index 38e857f22f..91fc8c1087 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -1171,13 +1171,22 @@ CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckLinearizedData() {
return DataError;
if (!m_bMainXRefLoadTried) {
+ ASSERT(m_pDocument->GetParser()->GetTrailer());
+ const FX_SAFE_FILESIZE main_xref_offset =
+ m_pDocument->GetParser()->GetTrailer()->GetIntegerFor("Prev");
+ if (!main_xref_offset.IsValid())
+ return DataError;
+
+ if (main_xref_offset.ValueOrDie() == 0)
+ return DataAvailable;
+
FX_SAFE_SIZE_T data_size = m_dwFileLen;
- data_size -= m_pLinearized->GetLastXRefOffset();
+ data_size -= main_xref_offset.ValueOrDie();
if (!data_size.IsValid())
return DataError;
if (!GetValidator()->CheckDataRangeAndRequestIfUnavailable(
- m_pLinearized->GetLastXRefOffset(), data_size.ValueOrDie()))
+ main_xref_offset.ValueOrDie(), data_size.ValueOrDie()))
return DataNotAvailable;
CPDF_Parser::Error eRet =