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

Side by Side 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 4 years, 12 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "../../include/fsdk_define.h" 7 #include "../../include/fsdk_define.h"
8 #include "../../include/fpdfxfa/fpdfxfa_doc.h" 8 #include "../../include/fpdfxfa/fpdfxfa_doc.h"
9 #include "../../include/fsdk_mgr.h" 9 #include "../../include/fsdk_mgr.h"
10 #include "../../include/fpdfxfa/fpdfxfa_app.h" 10 #include "../../include/fpdfxfa/fpdfxfa_app.h"
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 case DOCTYPE_DYNAMIC_XFA: 137 case DOCTYPE_DYNAMIC_XFA:
138 if (m_pXFADoc) 138 if (m_pXFADoc)
139 return m_pXFADocView->CountPageViews(); 139 return m_pXFADocView->CountPageViews();
140 default: 140 default:
141 return 0; 141 return 0;
142 } 142 }
143 143
144 return 0; 144 return 0;
145 } 145 }
146 146
147 CPDFXFA_Page* CPDFXFA_Document::GetPage(int page_index) { 147 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
148 if (!m_pPDFDoc && !m_pXFADoc) 148 CPDFXFA_Page* pPage = nullptr;
Lei Zhang 2015/12/21 17:47:58 Do you still care about these being nullptrs?
149 return NULL; 149 int nCount = m_XFAPageList.GetSize();
150 150 if (nCount > 0 && page_index < nCount) {
151 CPDFXFA_Page* pPage = NULL;
152 if (m_XFAPageList.GetSize()) {
153 pPage = m_XFAPageList.GetAt(page_index); 151 pPage = m_XFAPageList.GetAt(page_index);
154 if (pPage) 152 if (pPage)
155 pPage->AddRef(); 153 pPage->AddRef();
156 } else { 154 } else {
157 m_XFAPageList.SetSize(GetPageCount()); 155 m_XFAPageList.SetSize(GetPageCount());
158 } 156 }
159 157 if (pPage)
160 if (!pPage) { 158 return pPage;
161 pPage = new CPDFXFA_Page(this, page_index); 159 pPage = new CPDFXFA_Page(this, page_index);
162 FX_BOOL bRet = pPage->LoadPage(); 160 if (!pPage->LoadPage()) {
163 if (!bRet) { 161 delete pPage;
164 delete pPage; 162 return nullptr;
165 return NULL;
166 }
167
168 m_XFAPageList.SetAt(page_index, pPage);
169 } 163 }
170 164 m_XFAPageList.SetAt(page_index, pPage);
171 return pPage; 165 return pPage;
172 } 166 }
173 167
174 CPDFXFA_Page* CPDFXFA_Document::GetPage(IXFA_PageView* pPage) { 168 CPDFXFA_Page* CPDFXFA_Document::GetPage(IXFA_PageView* pPage) {
175 if (!pPage) 169 if (!pPage)
176 return NULL; 170 return NULL;
177 171
178 if (!m_pXFADoc) 172 if (!m_pXFADoc)
179 return NULL; 173 return NULL;
180 174
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 menuFlag |= FXFA_MEMU_SELECTALL; 477 menuFlag |= FXFA_MEMU_SELECTALL;
484 478
485 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 479 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
486 if (pEnv == NULL) 480 if (pEnv == NULL)
487 return FALSE; 481 return FALSE;
488 482
489 return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, NULL); 483 return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, NULL);
490 } 484 }
491 485
492 void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView, 486 void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView,
493 FX_DWORD dwFlags) { 487 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.
488 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.
489 FXFA_PAGEVIEWEVENT_POSTREMOVED != dwFlags)) {
490 return;
491 }
492 CPDFXFA_Page* pPage = nullptr;
493 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.
494 pPage = GetPage(pPageView->GetPageViewIndex());
495 if (pPage)
496 pPage->SetXFAPageView(pPageView);
497 return;
498 }
499 pPage = GetPage(pPageView);
500 if (!pPage)
501 return;
502 pPage->SetXFAPageView(nullptr);
503 m_pSDKDoc->GetPageView(pPage)->ClearFXAnnots();
494 } 504 }
495 505
496 void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget, 506 void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget,
497 CXFA_WidgetAcc* pWidgetData, 507 CXFA_WidgetAcc* pWidgetData,
498 FX_DWORD dwEvent, 508 FX_DWORD dwEvent,
499 void* pParam, 509 void* pParam,
500 void* pAdditional) { 510 void* pAdditional) {
501 if (m_iDocType != DOCTYPE_DYNAMIC_XFA || !hWidget) 511 if (m_iDocType != DOCTYPE_DYNAMIC_XFA || !hWidget)
502 return; 512 return;
503 513
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after
1267 } 1277 }
1268 1278
1269 return _GetHValueByName(szPropName, hValue, 1279 return _GetHValueByName(szPropName, hValue,
1270 m_pSDKDoc->GetEnv()->GetJSRuntime()); 1280 m_pSDKDoc->GetEnv()->GetJSRuntime());
1271 } 1281 }
1272 FX_BOOL CPDFXFA_Document::_GetHValueByName(const CFX_ByteStringC& utf8Name, 1282 FX_BOOL CPDFXFA_Document::_GetHValueByName(const CFX_ByteStringC& utf8Name,
1273 FXJSE_HVALUE hValue, 1283 FXJSE_HVALUE hValue,
1274 IJS_Runtime* runTime) { 1284 IJS_Runtime* runTime) {
1275 return runTime->GetHValueByName(utf8Name, hValue); 1285 return runTime->GetHValueByName(utf8Name, hValue);
1276 } 1286 }
OLDNEW
« 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