diff options
author | tsepez <tsepez@chromium.org> | 2017-01-11 09:32:33 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2017-01-11 09:32:33 -0800 |
commit | 8fa82794ffc2763e9fa1fc9d401c8e9a14d7c67f (patch) | |
tree | 724f69ba295176752df1040e4fb770f69c8dda93 /fpdfsdk/javascript/Document.cpp | |
parent | 76a44dea318041f8229d80e70ca3568a435611eb (diff) | |
download | pdfium-8fa82794ffc2763e9fa1fc9d401c8e9a14d7c67f.tar.xz |
Annotation deleted while retrieving it in JS
Widgets as returned from GetWidgets() can pop out of existence
unexpectedly, so always return observed pointers. This extends
the same pattern used elsewhere in the file to all occurrences.
BUG=679642
Review-Url: https://codereview.chromium.org/2624933002
Diffstat (limited to 'fpdfsdk/javascript/Document.cpp')
-rw-r--r-- | fpdfsdk/javascript/Document.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp index 29f9764806..7e4dc260f2 100644 --- a/fpdfsdk/javascript/Document.cpp +++ b/fpdfsdk/javascript/Document.cpp @@ -506,12 +506,16 @@ bool Document::removeField(IJS_Context* cc, CJS_Runtime* pRuntime = pContext->GetJSRuntime(); CFX_WideString sFieldName = params[0].ToCFXWideString(pRuntime); CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm(); - std::vector<CPDFSDK_Widget*> widgets; + std::vector<CPDFSDK_Annot::ObservedPtr> widgets; pInterForm->GetWidgets(sFieldName, &widgets); if (widgets.empty()) return true; - for (CPDFSDK_Widget* pWidget : widgets) { + for (const auto& pAnnot : widgets) { + CPDFSDK_Widget* pWidget = static_cast<CPDFSDK_Widget*>(pAnnot.Get()); + if (!pWidget) + continue; + CFX_FloatRect rcAnnot = pWidget->GetRect(); --rcAnnot.left; --rcAnnot.bottom; |