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

Unified Diff: fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp

Issue 1539193003: Fix crashing in CPDFXFA_Document::GetPage() (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years 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: fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
index 16f3209af3dac8357a6062eb2316924c69809891..109a0946ba2dd6557d811cf74441f78255ff0284 100644
--- a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
+++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
@@ -145,29 +145,23 @@ int CPDFXFA_Document::GetPageCount() {
}
CPDFXFA_Page* CPDFXFA_Document::GetPage(int page_index) {
Lei Zhang 2015/12/21 17:47:59 What happen if |page_index| is negative?
jun_fang 2016/01/04 09:30:23 It shouldn't be less than 0. Will add a test to ma
- if (!m_pPDFDoc && !m_pXFADoc)
Lei Zhang 2015/12/21 17:47:58 Do you still care about these being nullptrs?
- return NULL;
-
- CPDFXFA_Page* pPage = NULL;
- if (m_XFAPageList.GetSize()) {
+ CPDFXFA_Page* pPage = nullptr;
+ int nCount = m_XFAPageList.GetSize();
+ if (nCount > 0 && page_index < nCount) {
pPage = m_XFAPageList.GetAt(page_index);
if (pPage)
pPage->AddRef();
} else {
m_XFAPageList.SetSize(GetPageCount());
}
-
- if (!pPage) {
- pPage = new CPDFXFA_Page(this, page_index);
- FX_BOOL bRet = pPage->LoadPage();
- if (!bRet) {
- delete pPage;
- return NULL;
- }
-
- m_XFAPageList.SetAt(page_index, pPage);
+ if (pPage)
+ return pPage;
+ pPage = new CPDFXFA_Page(this, page_index);
+ if (!pPage->LoadPage()) {
+ delete pPage;
+ return nullptr;
}
-
+ m_XFAPageList.SetAt(page_index, pPage);
return pPage;
}
@@ -491,6 +485,22 @@ FX_BOOL CPDFXFA_Document::PopupMenu(IXFA_Widget* hWidget,
void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView,
FX_DWORD dwFlags) {
Lei Zhang 2015/12/21 17:47:58 Is |dwFlags| always just a single value, or can it
jun_fang 2016/01/04 09:30:23 It's just a single value.
+ if (!pPageView || (FXFA_PAGEVIEWEVENT_POSTADDED != dwFlags &&
jun_fang 2015/12/21 07:19:59 SDK needs to handle changes on page view. The even
Lei Zhang 2015/12/21 17:47:59 The posted value is XFA_PAGEVIEWEVENT_PostRemoved,
jun_fang 2016/01/04 09:30:23 Acknowledged.
+ FXFA_PAGEVIEWEVENT_POSTREMOVED != dwFlags)) {
+ return;
+ }
+ CPDFXFA_Page* pPage = nullptr;
+ if (FXFA_PAGEVIEWEVENT_POSTADDED == dwFlags) {
Lei Zhang 2015/12/21 17:47:58 nit: Prefer to just write: var == value I believe
jun_fang 2016/01/04 09:30:23 Acknowledged.
+ pPage = GetPage(pPageView->GetPageViewIndex());
+ if (pPage)
+ pPage->SetXFAPageView(pPageView);
+ return;
+ }
+ pPage = GetPage(pPageView);
+ if (!pPage)
+ return;
+ pPage->SetXFAPageView(nullptr);
+ m_pSDKDoc->GetPageView(pPage)->ClearFXAnnots();
}
void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget,
« no previous file with comments | « fpdfsdk/include/fsdk_mgr.h ('k') | fpdfsdk/src/fsdk_mgr.cpp » ('j') | fpdfsdk/src/fsdk_mgr.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698