Index: fpdfsdk/javascript/Field.cpp |
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp |
index 3f5e5e1b0f57ae9aabb2675b4a0705d8e1bee752..64c7735dcf7f989e142bec1e611ea68db4bcf075 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_Annot* pAnnot : widgets) { |
@@ -285,6 +286,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); |