diff --git a/fpdfsdk/cpdfsdk_interform.cpp b/fpdfsdk/cpdfsdk_interform.cpp
index 549caaf..2cc20f9 100644
--- a/fpdfsdk/cpdfsdk_interform.cpp
+++ b/fpdfsdk/cpdfsdk_interform.cpp
@@ -323,14 +323,11 @@
   }
 }
 
-WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField,
-                                       bool& bFormatted) {
-  WideString sValue = pFormField->GetValue();
-  if (!m_pFormFillEnv->IsJSPlatformPresent()) {
-    bFormatted = false;
-    return sValue;
-  }
+Optional<WideString> CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField) {
+  if (!m_pFormFillEnv->IsJSPlatformPresent())
+    return {};
 
+  WideString sValue = pFormField->GetValue();
   IJS_Runtime* pRuntime = m_pFormFillEnv->GetIJSRuntime();
   if (pFormField->GetFieldType() == FormFieldType::kComboBox &&
       pFormField->CountSelectedItems() > 0) {
@@ -339,30 +336,25 @@
       sValue = pFormField->GetOptionLabel(index);
   }
 
-  bFormatted = false;
-
   CPDF_AAction aAction = pFormField->GetAdditionalAction();
   if (aAction.GetDict() && aAction.ActionExist(CPDF_AAction::Format)) {
     CPDF_Action action = aAction.GetAction(CPDF_AAction::Format);
     if (action.GetDict()) {
       WideString script = action.GetJavaScript();
       if (!script.IsEmpty()) {
-        WideString Value = sValue;
         IJS_Runtime::ScopedEventContext pContext(pRuntime);
-        pContext->OnField_Format(pFormField, &Value, true);
+        pContext->OnField_Format(pFormField, &sValue, true);
         Optional<IJS_Runtime::JS_Error> err = pContext->RunScript(script);
-        if (!err) {
-          sValue = std::move(Value);
-          bFormatted = true;
-        }
+        if (!err)
+          return sValue;
       }
     }
   }
-  return sValue;
+  return {};
 }
 
 void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField,
-                                             const WideString* sValue,
+                                             Optional<WideString> sValue,
                                              bool bValueChanged) {
   for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
     CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
@@ -591,9 +583,7 @@
     return;
 
   OnCalculate(pField);
-  bool bFormatted = false;
-  WideString sValue = OnFormat(pField, bFormatted);
-  ResetFieldAppearance(pField, bFormatted ? &sValue : nullptr, true);
+  ResetFieldAppearance(pField, OnFormat(pField), true);
   UpdateField(pField);
 }
 
@@ -611,7 +601,7 @@
     return;
 
   OnCalculate(pField);
-  ResetFieldAppearance(pField, nullptr, true);
+  ResetFieldAppearance(pField, pdfium::nullopt, true);
   UpdateField(pField);
 }
 
