Chromium Code Reviews| Index: fpdfsdk/fsdk_mgr.cpp |
| diff --git a/fpdfsdk/fsdk_mgr.cpp b/fpdfsdk/fsdk_mgr.cpp |
| index 0fc61dac7a251ba9a56a3969df7303320415de80..0850654581df120a93d8b7e3db2999e7be0fb539 100644 |
| --- a/fpdfsdk/fsdk_mgr.cpp |
| +++ b/fpdfsdk/fsdk_mgr.cpp |
| @@ -299,6 +299,8 @@ CPDFSDK_PageView* CPDFSDK_Document::GetPageView(int nIndex) { |
| return nullptr; |
| auto it = m_pageMap.find(pTempPage); |
| + if (it == m_pageMap.end()) |
|
Tom Sepez
2016/09/07 16:17:40
nit: maybe ? operator
dsinclair
2016/09/07 16:36:36
Done.
|
| + return nullptr; |
| return it->second; |
| } |
| @@ -505,6 +507,13 @@ CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, |
| } |
| CPDFSDK_PageView::~CPDFSDK_PageView() { |
| +#ifndef PDF_ENABLE_XFA |
| + // The call to |ReleaseAnnot| can cause the page pointed to by |m_page| to |
| + // be freed, which will cause issues if we try to cleanup the pageview pointer |
| + // in |m_page|. So, reset the pageview pointer before doing anything else. |
| + m_page->SetView(nullptr); |
| +#endif // PDF_ENABLE_XFA |
| + |
| CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
| CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |
| for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) |
| @@ -512,11 +521,10 @@ CPDFSDK_PageView::~CPDFSDK_PageView() { |
| m_fxAnnotArray.clear(); |
| m_pAnnotList.reset(); |
| + |
| #ifndef PDF_ENABLE_XFA |
| - m_page->SetView(nullptr); |
| - if (m_bTakeOverPage) { |
| + if (m_bTakeOverPage) |
|
Tom Sepez
2016/09/07 16:17:40
nit: someday call it m_bOwnsPage
dsinclair
2016/09/07 16:36:36
Done.
|
| delete m_page; |
| - } |
| #endif // PDF_ENABLE_XFA |
| } |