Simplify the calculation of Pages Offsets within CPDF_HintsTable.
Change-Id: I020fd5ae11b32f753d681e7e0c26b7f95e920bff
Reviewed-on: https://pdfium-review.googlesource.com/15812
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Art Snake <art-snake@yandex-team.ru>
diff --git a/core/fpdfapi/parser/cpdf_hint_tables.cpp b/core/fpdfapi/parser/cpdf_hint_tables.cpp
index a412fdc..7d37190 100644
--- a/core/fpdfapi/parser/cpdf_hint_tables.cpp
+++ b/core/fpdfapi/parser/cpdf_hint_tables.cpp
@@ -156,28 +156,21 @@
dwPageLenArray.push_back(safePageLen.ValueOrDie());
}
- const FX_FILESIZE nOffsetE = m_pLinearized->GetFirstPageEndOffset();
const uint32_t nFirstPageNum = m_pLinearized->GetFirstPageNo();
- for (uint32_t i = 0; i < nPages; ++i) {
- if (i == nFirstPageNum) {
- m_szPageOffsetArray.push_back(m_szFirstPageObjOffset);
- } else if (i == nFirstPageNum + 1) {
- if (i == 1) {
- m_szPageOffsetArray.push_back(nOffsetE);
- } else {
- m_szPageOffsetArray.push_back(m_szPageOffsetArray[i - 2] +
- dwPageLenArray[i - 2]);
- }
- } else {
- if (i == 0) {
- m_szPageOffsetArray.push_back(nOffsetE);
- } else {
- m_szPageOffsetArray.push_back(m_szPageOffsetArray[i - 1] +
- dwPageLenArray[i - 1]);
- }
- }
- }
+ if (nFirstPageNum >= nPages)
+ return false;
+ m_szPageOffsetArray.resize(nPages, 0);
+ ASSERT(m_szFirstPageObjOffset);
+ m_szPageOffsetArray[nFirstPageNum] = m_szFirstPageObjOffset;
+ FX_FILESIZE prev_page_offset = m_pLinearized->GetFirstPageEndOffset();
+ for (uint32_t i = 0; i < nPages; ++i) {
+ if (i == nFirstPageNum)
+ continue;
+
+ m_szPageOffsetArray[i] = prev_page_offset;
+ prev_page_offset += dwPageLenArray[i];
+ }
m_szPageOffsetArray.push_back(m_szPageOffsetArray[nPages - 1] +
dwPageLenArray[nPages - 1]);
hStream->ByteAlign();