diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
index 42e12ea..bee7bcd 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
@@ -30,9 +30,9 @@
 
 CFFL_InteractiveFormFiller::CFFL_InteractiveFormFiller(
     CPDFSDK_FormFillEnvironment* pFormFillEnv)
-    : m_pFormFillEnv(pFormFillEnv), m_bNotifying(false) {}
+    : m_pFormFillEnv(pFormFillEnv) {}
 
-CFFL_InteractiveFormFiller::~CFFL_InteractiveFormFiller() {}
+CFFL_InteractiveFormFiller::~CFFL_InteractiveFormFiller() = default;
 
 bool CFFL_InteractiveFormFiller::Annot_HitTest(CPDFSDK_PageView* pPageView,
                                                CPDFSDK_Annot* pAnnot,
@@ -97,7 +97,6 @@
     return;
   }
 
-  pFormFiller = GetFormFiller(pAnnot, false);
   if (pFormFiller) {
     pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, mtUser2Device);
   } else {
@@ -483,8 +482,8 @@
 CFFL_FormFiller* CFFL_InteractiveFormFiller::GetFormFiller(
     CPDFSDK_Annot* pAnnot,
     bool bRegister) {
-  auto it = m_Maps.find(pAnnot);
-  if (it != m_Maps.end())
+  auto it = m_Map.find(pAnnot);
+  if (it != m_Map.end())
     return it->second.get();
 
   if (!bRegister)
@@ -527,7 +526,7 @@
     return nullptr;
 
   CFFL_FormFiller* result = pFormFiller.get();
-  m_Maps[pAnnot] = std::move(pFormFiller);
+  m_Map[pAnnot] = std::move(pFormFiller);
   return result;
 }
 
@@ -578,11 +577,11 @@
 }
 
 void CFFL_InteractiveFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* pAnnot) {
-  auto it = m_Maps.find(pAnnot);
-  if (it == m_Maps.end())
+  auto it = m_Map.find(pAnnot);
+  if (it == m_Map.end())
     return;
 
-  m_Maps.erase(it);
+  m_Map.erase(it);
 }
 
 void CFFL_InteractiveFormFiller::QueryWherePopup(
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.h b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
index 4e6fceb..2a01418 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.h
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
@@ -80,7 +80,9 @@
   bool OnSetFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
   bool OnKillFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
 
-  CFFL_FormFiller* GetFormFiller(CPDFSDK_Annot* pAnnot, bool bRegister);
+  CFFL_FormFiller* GetFormFillerForTesting(CPDFSDK_Annot* pAnnot) {
+    return GetFormFiller(pAnnot, false);
+  }
 
   WideString GetText(CPDFSDK_Annot* pAnnot);
   WideString GetSelectedText(CPDFSDK_Annot* pAnnot);
@@ -133,7 +135,7 @@
 #endif  // PDF_ENABLE_XFA
 
  private:
-  using CFFL_Widget2Filler =
+  using WidgetToFormFillerMap =
       std::map<CPDFSDK_Annot*, std::unique_ptr<CFFL_FormFiller>>;
 
   // IPWL_Filler_Notify:
@@ -159,11 +161,12 @@
   void SetFocusAnnotTab(CPDFSDK_Annot* pWidget, bool bSameField, bool bNext);
 #endif  // PDF_ENABLE_XFA
 
+  CFFL_FormFiller* GetFormFiller(CPDFSDK_Annot* pAnnot, bool bRegister);
   void UnRegisterFormFiller(CPDFSDK_Annot* pAnnot);
 
   UnownedPtr<CPDFSDK_FormFillEnvironment> const m_pFormFillEnv;
-  CFFL_Widget2Filler m_Maps;
-  bool m_bNotifying;
+  WidgetToFormFillerMap m_Map;
+  bool m_bNotifying = false;
 };
 
 class CFFL_PrivateData final : public CPWL_Wnd::PrivateData {
diff --git a/fpdfsdk/pwl/cpwl_combo_box_embeddertest.cpp b/fpdfsdk/pwl/cpwl_combo_box_embeddertest.cpp
index 0caa4f2..d86828c 100644
--- a/fpdfsdk/pwl/cpwl_combo_box_embeddertest.cpp
+++ b/fpdfsdk/pwl/cpwl_combo_box_embeddertest.cpp
@@ -60,7 +60,7 @@
     }
 
     m_pFormFiller =
-        pInteractiveFormFiller->GetFormFiller(pAnnotCombobox, false);
+        pInteractiveFormFiller->GetFormFillerForTesting(pAnnotCombobox);
     ASSERT_TRUE(m_pFormFiller);
 
     CPWL_Wnd* pWindow =
diff --git a/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp b/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
index 0e9b272..c4e92d1 100644
--- a/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
@@ -60,7 +60,7 @@
     }
 
     m_pFormFiller =
-        pInteractiveFormFiller->GetFormFiller(pAnnotTextField, false);
+        pInteractiveFormFiller->GetFormFillerForTesting(pAnnotTextField);
     ASSERT_TRUE(m_pFormFiller);
 
     CPWL_Wnd* pWindow =
