Index: fpdfsdk/javascript/Field.cpp |
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp |
index 5c279d6b53a9839a077efca1d18e66f045f9b531..0a184d8ef1307998814e15e698f824ce0c0085ac 100644 |
--- a/fpdfsdk/javascript/Field.cpp |
+++ b/fpdfsdk/javascript/Field.cpp |
@@ -260,11 +260,12 @@ void Field::UpdateFormField(CPDFSDK_Document* pDocument, |
FX_BOOL bChangeMark, |
FX_BOOL bResetAP, |
FX_BOOL bRefresh) { |
- std::vector<CPDFSDK_Widget*> widgets; |
CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm(); |
- pInterForm->GetWidgets(pFormField, &widgets); |
if (bResetAP) { |
+ std::vector<CPDFSDK_Widget*> widgets; |
+ pInterForm->GetWidgets(pFormField, &widgets); |
+ |
int nFieldType = pFormField->GetFieldType(); |
if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD) { |
for (CPDFSDK_Widget* pWidget : widgets) { |
@@ -284,6 +285,12 @@ void Field::UpdateFormField(CPDFSDK_Document* pDocument, |
} |
if (bRefresh) { |
+ // Refresh the widget list. The calls in |bResetAP| may have caused widgets |
+ // to be removed from the list. We need to call |GetWidgets| again to be |
+ // sure none of the widgets have been deleted. |
+ std::vector<CPDFSDK_Widget*> widgets; |
+ pInterForm->GetWidgets(pFormField, &widgets); |
+ |
for (CPDFSDK_Widget* pWidget : widgets) { |
CPDFSDK_Document* pDoc = pWidget->GetInterForm()->GetDocument(); |
pDoc->UpdateAllViews(nullptr, pWidget); |