summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordsinclair <dsinclair@chromium.org>2016-09-06 14:18:57 -0700
committerCommit bot <commit-bot@chromium.org>2016-09-06 14:18:57 -0700
commit1897bdc3cf51c84a0356d373e34ec100c93c954e (patch)
tree1b7afb7100cf9dad87e4cecd66eecf053fc7f2af
parent73c485699b323eaecc801ce55460268f7a79b34e (diff)
downloadpdfium-1897bdc3cf51c84a0356d373e34ec100c93c954e.tar.xz
Do not re-create the page view when accessing from Document::removeField.
When removing a field from the document we can force the recreation of a CPDFSDK_PageView by passing |true| as the last parameter to |GetPageView|. This will force a new page view to be created so we can delete a field from it and, we then end up with a dangling PageView. This CL passes |false| to |GetPageView| and skips removing the widget if we do not receive a pageView back from the document. BUG=chromium:644219 Review-Url: https://codereview.chromium.org/2312023004
-rw-r--r--fpdfsdk/javascript/Document.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index c1381f5865..d8e36227e5 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -463,7 +463,7 @@ FX_BOOL Document::print(IJS_Context* cc,
// removes the specified field from the document.
// comment:
-// note: if the filed name is not retional, adobe is dumb for it.
+// note: if the filed name is not rational, adobe is dumb for it.
FX_BOOL Document::removeField(IJS_Context* cc,
const std::vector<CJS_Value>& params,
@@ -500,9 +500,14 @@ FX_BOOL Document::removeField(IJS_Context* cc,
UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
ASSERT(pPage);
- CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage, true);
- pPageView->DeleteAnnot(pWidget);
- pPageView->UpdateRects(aRefresh);
+ // If there is currently no pageview associated with the page being used
+ // do not create one. We may be in the process of tearing down the document
+ // and creating a new pageview at this point will cause bad things.
+ CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage, false);
+ if (pPageView) {
+ pPageView->DeleteAnnot(pWidget);
+ pPageView->UpdateRects(aRefresh);
+ }
}
m_pDocument->SetChangeMark();