diff options
author | Tom Sepez <tsepez@chromium.org> | 2018-10-24 23:56:43 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-10-24 23:56:43 +0000 |
commit | 333165a2c7b7812effdea3cd1ae386850cd3f310 (patch) | |
tree | 9d3c0757b745bbc3789b282e5aeb931f7a47880e /fpdfsdk/formfiller/cffl_checkbox.cpp | |
parent | 98d1b48e9a3471a02968f3d12692645fa0fcb50d (diff) | |
download | pdfium-333165a2c7b7812effdea3cd1ae386850cd3f310.tar.xz |
Fix CPLW_Wnd ownership model in CFFL_FormFiller.
CFFL_FormFiller::DestroyPDFWindow() might get re-entered, so
do not leave any dangling references in maps. Use unique_ptr
to be more sure that we have it right.
Bug: chromium:898531
Change-Id: I7b61940ff4e88c8a7e3219fefb0479f33bbbfae1
Reviewed-on: https://pdfium-review.googlesource.com/c/44542
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'fpdfsdk/formfiller/cffl_checkbox.cpp')
-rw-r--r-- | fpdfsdk/formfiller/cffl_checkbox.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/fpdfsdk/formfiller/cffl_checkbox.cpp b/fpdfsdk/formfiller/cffl_checkbox.cpp index 4308c1a1a5..ac55125db2 100644 --- a/fpdfsdk/formfiller/cffl_checkbox.cpp +++ b/fpdfsdk/formfiller/cffl_checkbox.cpp @@ -6,11 +6,14 @@ #include "fpdfsdk/formfiller/cffl_checkbox.h" +#include <utility> + #include "fpdfsdk/cpdfsdk_formfillenvironment.h" #include "fpdfsdk/cpdfsdk_widget.h" #include "fpdfsdk/formfiller/cffl_formfiller.h" #include "fpdfsdk/pwl/cpwl_special_button.h" #include "public/fpdf_fwlevent.h" +#include "third_party/base/ptr_util.h" CFFL_CheckBox::CFFL_CheckBox(CPDFSDK_FormFillEnvironment* pApp, CPDFSDK_Widget* pWidget) @@ -18,11 +21,12 @@ CFFL_CheckBox::CFFL_CheckBox(CPDFSDK_FormFillEnvironment* pApp, CFFL_CheckBox::~CFFL_CheckBox() {} -CPWL_Wnd* CFFL_CheckBox::NewPDFWindow(const CPWL_Wnd::CreateParams& cp) { - auto* pWnd = new CPWL_CheckBox(); +std::unique_ptr<CPWL_Wnd> CFFL_CheckBox::NewPDFWindow( + const CPWL_Wnd::CreateParams& cp) { + auto pWnd = pdfium::MakeUnique<CPWL_CheckBox>(); pWnd->Create(cp); pWnd->SetCheck(m_pWidget->IsChecked()); - return pWnd; + return std::move(pWnd); } bool CFFL_CheckBox::OnKeyDown(CPDFSDK_Annot* pAnnot, |