Index: core/fpdfapi/parser/cpdf_document.cpp |
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp |
index 1c73ce1015b168f633a2a4b5362a1229ee98d39a..678839411864a52e86ca65ec561e4e79645018b7 100644 |
--- a/core/fpdfapi/parser/cpdf_document.cpp |
+++ b/core/fpdfapi/parser/cpdf_document.cpp |
@@ -492,9 +492,18 @@ CPDF_Dictionary* CPDF_Document::GetPage(int iPage) { |
if (!pPages) |
return nullptr; |
+ if (iPage - m_iNextPageToTraverse + 1 <= 0) { |
+ // This can happen when the page does not have an object number. On repeated |
+ // calls to this function for the same page index, this condition causes |
+ // TraversePDFPages() to incorrectly return nullptr. |
+ // Example "testing/corpus/fx/other/jetman_std.pdf" |
+ // We should restart traversing in this case. |
+ // TODO(art-snake): optimize this. |
+ ResetTraversal(); |
+ } |
+ int nPagesToGo = iPage - m_iNextPageToTraverse + 1; |
if (m_pTreeTraversal.empty()) |
m_pTreeTraversal.push_back(std::make_pair(pPages, 0)); |
- int nPagesToGo = iPage - m_iNextPageToTraverse + 1; |
CPDF_Dictionary* pPage = TraversePDFPages(iPage, &nPagesToGo, 0); |
m_iNextPageToTraverse = iPage + 1; |
return pPage; |