Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1404)

Unified Diff: core/fpdfapi/parser/cpdf_data_avail.cpp

Issue 2437773003: Fix loading page using hint tables. (Closed)
Patch Set: fix compilation on linux. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: core/fpdfapi/parser/cpdf_data_avail.cpp
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index e23aa8ecfbd6bc063d11c1be8c70ed17211884ce..e52d0611f973867ac99cda381837d1872df6f787 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -1625,6 +1625,8 @@ CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
nResult = m_pHintTables->CheckPage(dwPage, pHints);
if (nResult != DataAvailable)
return nResult;
+ // We should say to the document, which object is the page.
+ m_pDocument->SetPageObjNum(dwPage, GetPage(dwPage)->GetObjNum());
Lei Zhang 2016/10/20 21:43:36 Can GetPage() return a nullptr here?
Lei Zhang 2016/10/21 17:15:53 Based on the new crashes that caused this revert..
snake 2016/10/24 15:38:31 But should not, because the page should be availab
m_pagesLoadState.insert(dwPage);
return DataAvailable;
}
@@ -1763,11 +1765,18 @@ CPDF_Dictionary* CPDF_DataAvail::GetPage(int index) {
uint32_t dwObjNum = 0;
bool bPagePosGot = m_pHintTables->GetPagePos(index, &szPageStartPos,
&szPageLength, &dwObjNum);
+ if (!dwObjNum)
Lei Zhang 2016/10/20 21:43:36 You should check |bPagePosGot| first, because if i
+ return nullptr;
+ // Page object already can be parsed in document.
+ CPDF_Object* pPageDict = m_pDocument->GetIndirectObject(dwObjNum);
+ if (pPageDict)
+ return pPageDict->GetDict();
+
if (!bPagePosGot)
return nullptr;
m_syntaxParser.InitParser(m_pFileRead, (uint32_t)szPageStartPos);
- CPDF_Object* pPageDict = ParseIndirectObjectAt(0, dwObjNum, m_pDocument);
+ pPageDict = ParseIndirectObjectAt(0, dwObjNum, m_pDocument);
if (!pPageDict)
return nullptr;

Powered by Google App Engine
This is Rietveld 408576698