diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index 686054f..679acd1 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -928,7 +928,7 @@
 bool CPDF_FormField::NotifyBeforeSelectionChange(const WideString& value) {
   if (!m_pForm->GetFormNotify())
     return true;
-  return m_pForm->GetFormNotify()->BeforeSelectionChange(this, value) >= 0;
+  return m_pForm->GetFormNotify()->BeforeSelectionChange(this, value);
 }
 
 void CPDF_FormField::NotifyAfterSelectionChange() {
@@ -940,7 +940,7 @@
 bool CPDF_FormField::NotifyBeforeValueChange(const WideString& value) {
   if (!m_pForm->GetFormNotify())
     return true;
-  return m_pForm->GetFormNotify()->BeforeValueChange(this, value) >= 0;
+  return m_pForm->GetFormNotify()->BeforeValueChange(this, value);
 }
 
 void CPDF_FormField::NotifyAfterValueChange() {
diff --git a/core/fpdfdoc/cpdf_interform.cpp b/core/fpdfdoc/cpdf_interform.cpp
index c8440ea..2fbc3aa 100644
--- a/core/fpdfdoc/cpdf_interform.cpp
+++ b/core/fpdfdoc/cpdf_interform.cpp
@@ -1203,11 +1203,11 @@
   FormFieldType fieldType = pField->GetFieldType();
   if (bNotify && m_pFormNotify) {
     if (fieldType == FormFieldType::kListBox) {
-      if (m_pFormNotify->BeforeSelectionChange(pField, csWValue) < 0)
+      if (!m_pFormNotify->BeforeSelectionChange(pField, csWValue))
         return;
     } else if (fieldType == FormFieldType::kComboBox ||
                fieldType == FormFieldType::kTextField) {
-      if (m_pFormNotify->BeforeValueChange(pField, csWValue) < 0)
+      if (!m_pFormNotify->BeforeValueChange(pField, csWValue))
         return;
     }
   }
diff --git a/core/fpdfdoc/ipdf_formnotify.h b/core/fpdfdoc/ipdf_formnotify.h
index 10a97a0..053ca12 100644
--- a/core/fpdfdoc/ipdf_formnotify.h
+++ b/core/fpdfdoc/ipdf_formnotify.h
@@ -16,12 +16,12 @@
  public:
   virtual ~IPDF_FormNotify() {}
 
-  virtual int BeforeValueChange(CPDF_FormField* pField,
-                                const WideString& csValue) = 0;
+  virtual bool BeforeValueChange(CPDF_FormField* pField,
+                                 const WideString& csValue) = 0;
   virtual void AfterValueChange(CPDF_FormField* pField) = 0;
 
-  virtual int BeforeSelectionChange(CPDF_FormField* pField,
-                                    const WideString& csValue) = 0;
+  virtual bool BeforeSelectionChange(CPDF_FormField* pField,
+                                     const WideString& csValue) = 0;
   virtual void AfterSelectionChange(CPDF_FormField* pField) = 0;
 
   virtual void AfterCheckedStatusChange(CPDF_FormField* pField) = 0;
diff --git a/fpdfsdk/cpdfsdk_interform.cpp b/fpdfsdk/cpdfsdk_interform.cpp
index 94c9b23..57f3a6e 100644
--- a/fpdfsdk/cpdfsdk_interform.cpp
+++ b/fpdfsdk/cpdfsdk_interform.cpp
@@ -622,16 +622,14 @@
   return fields;
 }
 
-int CPDFSDK_InterForm::BeforeValueChange(CPDF_FormField* pField,
-                                         const WideString& csValue) {
+bool CPDFSDK_InterForm::BeforeValueChange(CPDF_FormField* pField,
+                                          const WideString& csValue) {
   FormFieldType fieldType = pField->GetFieldType();
   if (!IsFormFieldTypeComboOrText(fieldType))
-    return 0;
+    return true;
   if (!OnKeyStrokeCommit(pField, csValue))
-    return -1;
-  if (!OnValidate(pField, csValue))
-    return -1;
-  return 1;
+    return false;
+  return OnValidate(pField, csValue);
 }
 
 void CPDFSDK_InterForm::AfterValueChange(CPDF_FormField* pField) {
@@ -650,15 +648,13 @@
   UpdateField(pField);
 }
 
-int CPDFSDK_InterForm::BeforeSelectionChange(CPDF_FormField* pField,
-                                             const WideString& csValue) {
+bool CPDFSDK_InterForm::BeforeSelectionChange(CPDF_FormField* pField,
+                                              const WideString& csValue) {
   if (pField->GetFieldType() != FormFieldType::kListBox)
-    return 0;
+    return true;
   if (!OnKeyStrokeCommit(pField, csValue))
-    return -1;
-  if (!OnValidate(pField, csValue))
-    return -1;
-  return 1;
+    return false;
+  return OnValidate(pField, csValue);
 }
 
 void CPDFSDK_InterForm::AfterSelectionChange(CPDF_FormField* pField) {
diff --git a/fpdfsdk/cpdfsdk_interform.h b/fpdfsdk/cpdfsdk_interform.h
index 893b601..58dc2d0 100644
--- a/fpdfsdk/cpdfsdk_interform.h
+++ b/fpdfsdk/cpdfsdk_interform.h
@@ -102,11 +102,11 @@
 
  private:
   // IPDF_FormNotify:
-  int BeforeValueChange(CPDF_FormField* pField,
-                        const WideString& csValue) override;
+  bool BeforeValueChange(CPDF_FormField* pField,
+                         const WideString& csValue) override;
   void AfterValueChange(CPDF_FormField* pField) override;
-  int BeforeSelectionChange(CPDF_FormField* pField,
-                            const WideString& csValue) override;
+  bool BeforeSelectionChange(CPDF_FormField* pField,
+                             const WideString& csValue) override;
   void AfterSelectionChange(CPDF_FormField* pField) override;
   void AfterCheckedStatusChange(CPDF_FormField* pField) override;
   void AfterFormReset(CPDF_InterForm* pForm) override;
