diff options
author | dsinclair <dsinclair@chromium.org> | 2016-09-06 14:18:57 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-06 14:18:57 -0700 |
commit | 1897bdc3cf51c84a0356d373e34ec100c93c954e (patch) | |
tree | 1b7afb7100cf9dad87e4cecd66eecf053fc7f2af /fpdfsdk | |
parent | 73c485699b323eaecc801ce55460268f7a79b34e (diff) | |
download | pdfium-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
Diffstat (limited to 'fpdfsdk')
-rw-r--r-- | fpdfsdk/javascript/Document.cpp | 13 |
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(); |