Observe widgets earlier in CFFL_{Combo,List}Box::SaveData().

Defensive programming against a possible JS re-entry under XFA.

Fixed: 341095523
Change-Id: I59626adcad1c716d42c79e2642a2d65066eb043d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/119318
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/formfiller/cffl_combobox.cpp b/fpdfsdk/formfiller/cffl_combobox.cpp
index fa53cc8..a95574b 100644
--- a/fpdfsdk/formfiller/cffl_combobox.cpp
+++ b/fpdfsdk/formfiller/cffl_combobox.cpp
@@ -90,22 +90,25 @@
   if (m_pWidget->GetFieldFlags() & pdfium::form_flags::kChoiceEdit)
     bSetValue = (nCurSel < 0) || (swText != m_pWidget->GetOptionLabel(nCurSel));
 
+  ObservedPtr<CPDFSDK_Widget> observed_widget(m_pWidget);
   if (bSetValue) {
     m_pWidget->SetValue(swText);
   } else {
     m_pWidget->GetSelectedIndex(0);
     m_pWidget->SetOptionSelection(nCurSel);
   }
-  ObservedPtr<CPDFSDK_Widget> observed_widget(m_pWidget);
+  if (!observed_widget) {
+    return;
+  }
   ObservedPtr<CFFL_ComboBox> observed_this(this);
   m_pWidget->ResetFieldAppearance();
-  if (!observed_widget)
+  if (!observed_widget) {
     return;
-
+  }
   m_pWidget->UpdateField();
-  if (!observed_widget || !observed_this)
+  if (!observed_widget || !observed_this) {
     return;
-
+  }
   SetChangeMark();
 }
 
diff --git a/fpdfsdk/formfiller/cffl_listbox.cpp b/fpdfsdk/formfiller/cffl_listbox.cpp
index 2989840..c9e65d0 100644
--- a/fpdfsdk/formfiller/cffl_listbox.cpp
+++ b/fpdfsdk/formfiller/cffl_listbox.cpp
@@ -110,26 +110,26 @@
   }
   int32_t nNewTopIndex = pListBox->GetTopVisibleIndex();
   ObservedPtr<CPWL_ListBox> observed_box(pListBox);
+  ObservedPtr<CPDFSDK_Widget> observed_widget(m_pWidget);
   m_pWidget->ClearSelection();
-  if (!observed_box) {
+  if (!observed_box || !observed_widget) {
     return;
   }
   if (m_pWidget->GetFieldFlags() & pdfium::form_flags::kChoiceMultiSelect) {
     for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; i++) {
       if (pListBox->IsItemSelected(i)) {
         m_pWidget->SetOptionSelection(i);
-        if (!observed_box) {
+        if (!observed_box || !observed_widget) {
           return;
         }
       }
     }
   } else {
     m_pWidget->SetOptionSelection(pListBox->GetCurSel());
-    if (!observed_box) {
+    if (!observed_box || !observed_widget) {
       return;
     }
   }
-  ObservedPtr<CPDFSDK_Widget> observed_widget(m_pWidget);
   ObservedPtr<CFFL_ListBox> observed_this(this);
   m_pWidget->SetTopVisibleIndex(nNewTopIndex);
   if (!observed_widget) {