Use unique ptrs to free all varieties of annots.
Remove a few more bare |delete| calls.
Change-Id: I3497542608fda9390562ebea0572e18a4a18393b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/53410
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.cpp b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
index 0061eb5..b40014d 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.cpp
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
@@ -6,6 +6,8 @@
#include "fpdfsdk/cpdfsdk_annothandlermgr.h"
+#include <utility>
+
#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fpdfapi/parser/cpdf_string.h"
#include "core/fpdfdoc/cpdf_annot.h"
@@ -58,9 +60,10 @@
}
#endif // PDF_ENABLE_XFA
-void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
- IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot);
- pAnnotHandler->ReleaseAnnot(pAnnot);
+void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(
+ std::unique_ptr<CPDFSDK_Annot> pAnnot) {
+ IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot.get());
+ pAnnotHandler->ReleaseAnnot(std::move(pAnnot));
}
void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) {
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.h b/fpdfsdk/cpdfsdk_annothandlermgr.h
index bb1e8c3..7a79577 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.h
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.h
@@ -35,7 +35,7 @@
#ifdef PDF_ENABLE_XFA
CPDFSDK_Annot* NewAnnot(CXFA_FFWidget* pAnnot, CPDFSDK_PageView* pPageView);
#endif // PDF_ENABLE_XFA
- void ReleaseAnnot(CPDFSDK_Annot* pAnnot);
+ void ReleaseAnnot(std::unique_ptr<CPDFSDK_Annot> pAnnot);
void Annot_OnLoad(CPDFSDK_Annot* pAnnot);
diff --git a/fpdfsdk/cpdfsdk_baannothandler.cpp b/fpdfsdk/cpdfsdk_baannothandler.cpp
index b129e15..8c0135f 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.cpp
+++ b/fpdfsdk/cpdfsdk_baannothandler.cpp
@@ -58,8 +58,9 @@
}
#endif // PDF_ENABLE_XFA
-void CPDFSDK_BAAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
- delete pAnnot;
+void CPDFSDK_BAAnnotHandler::ReleaseAnnot(
+ std::unique_ptr<CPDFSDK_Annot> pAnnot) {
+ // pAnnot deleted by unique_ptr going out of scope.
}
void CPDFSDK_BAAnnotHandler::OnDraw(CPDFSDK_PageView* pPageView,
diff --git a/fpdfsdk/cpdfsdk_baannothandler.h b/fpdfsdk/cpdfsdk_baannothandler.h
index 8154a44..1c5cb49 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.h
+++ b/fpdfsdk/cpdfsdk_baannothandler.h
@@ -7,6 +7,8 @@
#ifndef FPDFSDK_CPDFSDK_BAANNOTHANDLER_H_
#define FPDFSDK_CPDFSDK_BAANNOTHANDLER_H_
+#include <memory>
+
#include "core/fxcrt/fx_coordinates.h"
#include "fpdfsdk/ipdfsdk_annothandler.h"
@@ -33,7 +35,7 @@
CPDFSDK_Annot* NewAnnot(CXFA_FFWidget* hWidget,
CPDFSDK_PageView* pPage) override;
#endif // PDF_ENABLE_XFA
- void ReleaseAnnot(CPDFSDK_Annot* pAnnot) override;
+ void ReleaseAnnot(std::unique_ptr<CPDFSDK_Annot> pAnnot) override;
CFX_FloatRect GetViewBBox(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot* pAnnot) override;
WideString GetText(CPDFSDK_Annot* pAnnot) override;
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index 4b0ab34..5b0b947 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -58,7 +58,7 @@
CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr =
m_pFormFillEnv->GetAnnotHandlerMgr();
for (CPDFSDK_Annot* pAnnot : m_SDKAnnotArray)
- pAnnotHandlerMgr->ReleaseAnnot(pAnnot);
+ pAnnotHandlerMgr->ReleaseAnnot(pdfium::WrapUnique(pAnnot));
m_SDKAnnotArray.clear();
m_pAnnotList.reset();
@@ -179,7 +179,7 @@
CPDFSDK_AnnotHandlerMgr* pAnnotHandler =
m_pFormFillEnv->GetAnnotHandlerMgr();
if (pAnnotHandler)
- pAnnotHandler->ReleaseAnnot(pObserved.Get());
+ pAnnotHandler->ReleaseAnnot(pdfium::WrapUnique(pObserved.Get()));
}
auto it = std::find(m_SDKAnnotArray.begin(), m_SDKAnnotArray.end(), pAnnot);
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index 47a8934..30137ca 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -77,11 +77,12 @@
}
#endif // PDF_ENABLE_XFA
-void CPDFSDK_WidgetHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
+void CPDFSDK_WidgetHandler::ReleaseAnnot(
+ std::unique_ptr<CPDFSDK_Annot> pAnnot) {
ASSERT(pAnnot);
- m_pFormFiller->OnDelete(pAnnot);
+ m_pFormFiller->OnDelete(pAnnot.get());
- std::unique_ptr<CPDFSDK_Widget> pWidget(ToCPDFSDKWidget(pAnnot));
+ std::unique_ptr<CPDFSDK_Widget> pWidget(ToCPDFSDKWidget(pAnnot.release()));
CPDFSDK_InteractiveForm* pForm = pWidget->GetInteractiveForm();
CPDF_FormControl* pControl = pWidget->GetFormControl();
pForm->RemoveMap(pControl);
diff --git a/fpdfsdk/cpdfsdk_widgethandler.h b/fpdfsdk/cpdfsdk_widgethandler.h
index 6997f2b..a3eca7e 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.h
+++ b/fpdfsdk/cpdfsdk_widgethandler.h
@@ -7,6 +7,8 @@
#ifndef FPDFSDK_CPDFSDK_WIDGETHANDLER_H_
#define FPDFSDK_CPDFSDK_WIDGETHANDLER_H_
+#include <memory>
+
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/unowned_ptr.h"
#include "fpdfsdk/ipdfsdk_annothandler.h"
@@ -34,7 +36,7 @@
CPDFSDK_Annot* NewAnnot(CXFA_FFWidget* hWidget,
CPDFSDK_PageView* pPage) override;
#endif // PDF_ENABLE_XFA
- void ReleaseAnnot(CPDFSDK_Annot* pAnnot) override;
+ void ReleaseAnnot(std::unique_ptr<CPDFSDK_Annot> pAnnot) override;
CFX_FloatRect GetViewBBox(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot* pAnnot) override;
WideString GetText(CPDFSDK_Annot* pAnnot) override;
diff --git a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
index 3ed228e..2fb13db 100644
--- a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
@@ -69,10 +69,10 @@
void CPDFSDK_XFAWidgetHandler::OnLoad(CPDFSDK_Annot* pAnnot) {}
-void CPDFSDK_XFAWidgetHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
- CPDFSDK_XFAWidget* pWidget = ToXFAWidget(pAnnot);
+void CPDFSDK_XFAWidgetHandler::ReleaseAnnot(
+ std::unique_ptr<CPDFSDK_Annot> pAnnot) {
+ CPDFSDK_XFAWidget* pWidget = ToXFAWidget(pAnnot.get());
pWidget->GetInteractiveForm()->RemoveXFAMap(pWidget->GetXFAWidget());
- delete pWidget;
}
CFX_FloatRect CPDFSDK_XFAWidgetHandler::GetViewBBox(CPDFSDK_PageView* pPageView,
diff --git a/fpdfsdk/cpdfsdk_xfawidgethandler.h b/fpdfsdk/cpdfsdk_xfawidgethandler.h
index e00f8a1..95f2ac1 100644
--- a/fpdfsdk/cpdfsdk_xfawidgethandler.h
+++ b/fpdfsdk/cpdfsdk_xfawidgethandler.h
@@ -7,6 +7,8 @@
#ifndef FPDFSDK_CPDFSDK_XFAWIDGETHANDLER_H_
#define FPDFSDK_CPDFSDK_XFAWIDGETHANDLER_H_
+#include <memory>
+
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/unowned_ptr.h"
#include "fpdfsdk/ipdfsdk_annothandler.h"
@@ -29,7 +31,7 @@
CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) override;
CPDFSDK_Annot* NewAnnot(CXFA_FFWidget* pAnnot,
CPDFSDK_PageView* pPage) override;
- void ReleaseAnnot(CPDFSDK_Annot* pAnnot) override;
+ void ReleaseAnnot(std::unique_ptr<CPDFSDK_Annot> pAnnot) override;
CFX_FloatRect GetViewBBox(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot* pAnnot) override;
WideString GetText(CPDFSDK_Annot* pAnnot) override;
diff --git a/fpdfsdk/ipdfsdk_annothandler.h b/fpdfsdk/ipdfsdk_annothandler.h
index c9f9e30..77c7ef3 100644
--- a/fpdfsdk/ipdfsdk_annothandler.h
+++ b/fpdfsdk/ipdfsdk_annothandler.h
@@ -7,6 +7,8 @@
#ifndef FPDFSDK_IPDFSDK_ANNOTHANDLER_H_
#define FPDFSDK_IPDFSDK_ANNOTHANDLER_H_
+#include <memory>
+
#include "core/fxcrt/fx_coordinates.h"
#include "fpdfsdk/cpdfsdk_annot.h"
@@ -32,7 +34,7 @@
CPDFSDK_PageView* pPage) = 0;
#endif // PDF_ENABLE_XFA
- virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot) = 0;
+ virtual void ReleaseAnnot(std::unique_ptr<CPDFSDK_Annot> pAnnot) = 0;
virtual CFX_FloatRect GetViewBBox(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot* pAnnot) = 0;
virtual WideString GetText(CPDFSDK_Annot* pAnnot) = 0;