diff --git a/core/fpdfdoc/cpdf_aaction.cpp b/core/fpdfdoc/cpdf_aaction.cpp
index 08ff554..e8e211c 100644
--- a/core/fpdfdoc/cpdf_aaction.cpp
+++ b/core/fpdfdoc/cpdf_aaction.cpp
@@ -18,8 +18,6 @@
 
 }  // namespace
 
-CPDF_AAction::CPDF_AAction() : CPDF_AAction(nullptr) {}
-
 CPDF_AAction::CPDF_AAction(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
 
 CPDF_AAction::CPDF_AAction(const CPDF_AAction& that) = default;
@@ -31,6 +29,6 @@
 }
 
 CPDF_Action CPDF_AAction::GetAction(AActionType eType) const {
-  return m_pDict ? CPDF_Action(m_pDict->GetDictFor(g_sAATypes[eType]))
-                 : CPDF_Action();
+  return CPDF_Action(m_pDict ? m_pDict->GetDictFor(g_sAATypes[eType])
+                             : nullptr);
 }
diff --git a/core/fpdfdoc/cpdf_aaction.h b/core/fpdfdoc/cpdf_aaction.h
index bfc67e5..a5b0d25 100644
--- a/core/fpdfdoc/cpdf_aaction.h
+++ b/core/fpdfdoc/cpdf_aaction.h
@@ -38,7 +38,6 @@
     NumberOfActions  // Must be last.
   };
 
-  CPDF_AAction();
   explicit CPDF_AAction(CPDF_Dictionary* pDict);
   CPDF_AAction(const CPDF_AAction& that);
   ~CPDF_AAction();
diff --git a/core/fpdfdoc/cpdf_action.cpp b/core/fpdfdoc/cpdf_action.cpp
index a3e2e23..383f328 100644
--- a/core/fpdfdoc/cpdf_action.cpp
+++ b/core/fpdfdoc/cpdf_action.cpp
@@ -21,8 +21,6 @@
 
 }  // namespace
 
-CPDF_Action::CPDF_Action() : CPDF_Action(nullptr) {}
-
 CPDF_Action::CPDF_Action(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
 
 CPDF_Action::CPDF_Action(const CPDF_Action& that) = default;
@@ -128,14 +126,14 @@
 
 CPDF_Action CPDF_Action::GetSubAction(size_t iIndex) const {
   if (!m_pDict || !m_pDict->KeyExist("Next"))
-    return CPDF_Action();
+    return CPDF_Action(nullptr);
 
   CPDF_Object* pNext = m_pDict->GetDirectObjectFor("Next");
+  if (CPDF_Array* pArray = ToArray(pNext))
+    return CPDF_Action(pArray->GetDictAt(iIndex));
   if (CPDF_Dictionary* pDict = ToDictionary(pNext)) {
     if (iIndex == 0)
       return CPDF_Action(pDict);
-  } else if (CPDF_Array* pArray = ToArray(pNext)) {
-    return CPDF_Action(pArray->GetDictAt(iIndex));
   }
-  return CPDF_Action();
+  return CPDF_Action(nullptr);
 }
diff --git a/core/fpdfdoc/cpdf_action.h b/core/fpdfdoc/cpdf_action.h
index 9b7f90d..1d9b722 100644
--- a/core/fpdfdoc/cpdf_action.h
+++ b/core/fpdfdoc/cpdf_action.h
@@ -37,7 +37,6 @@
     GoTo3DView
   };
 
-  CPDF_Action();
   explicit CPDF_Action(CPDF_Dictionary* pDict);
   CPDF_Action(const CPDF_Action& that);
   ~CPDF_Action();
diff --git a/core/fpdfdoc/cpdf_bookmark.cpp b/core/fpdfdoc/cpdf_bookmark.cpp
index 884c3cb..cc7e127 100644
--- a/core/fpdfdoc/cpdf_bookmark.cpp
+++ b/core/fpdfdoc/cpdf_bookmark.cpp
@@ -79,5 +79,5 @@
 }
 
 CPDF_Action CPDF_Bookmark::GetAction() const {
-  return m_pDict ? CPDF_Action(m_pDict->GetDictFor("A")) : CPDF_Action();
+  return CPDF_Action(m_pDict ? m_pDict->GetDictFor("A") : nullptr);
 }
diff --git a/core/fpdfdoc/cpdf_docjsactions.cpp b/core/fpdfdoc/cpdf_docjsactions.cpp
index 974ca33..91db2b0 100644
--- a/core/fpdfdoc/cpdf_docjsactions.cpp
+++ b/core/fpdfdoc/cpdf_docjsactions.cpp
@@ -22,17 +22,13 @@
                                                   WideString* csName) const {
   ASSERT(m_pDocument);
   CPDF_NameTree name_tree(m_pDocument.Get(), "JavaScript");
-  CPDF_Object* pAction = name_tree.LookupValueAndName(index, csName);
-  return ToDictionary(pAction) ? CPDF_Action(pAction->GetDict())
-                               : CPDF_Action();
+  return CPDF_Action(ToDictionary(name_tree.LookupValueAndName(index, csName)));
 }
 
 CPDF_Action CPDF_DocJSActions::GetJSAction(const WideString& csName) const {
   ASSERT(m_pDocument);
   CPDF_NameTree name_tree(m_pDocument.Get(), "JavaScript");
-  CPDF_Object* pAction = name_tree.LookupValue(csName);
-  return ToDictionary(pAction) ? CPDF_Action(pAction->GetDict())
-                               : CPDF_Action();
+  return CPDF_Action(ToDictionary(name_tree.LookupValue(csName)));
 }
 
 int CPDF_DocJSActions::FindJSAction(const WideString& csName) const {
diff --git a/core/fpdfdoc/cpdf_formcontrol.cpp b/core/fpdfdoc/cpdf_formcontrol.cpp
index 5e24c5f..384c35e 100644
--- a/core/fpdfdoc/cpdf_formcontrol.cpp
+++ b/core/fpdfdoc/cpdf_formcontrol.cpp
@@ -243,21 +243,18 @@
 
 CPDF_Action CPDF_FormControl::GetAction() {
   if (!m_pWidgetDict)
-    return CPDF_Action();
+    return CPDF_Action(nullptr);
 
   if (m_pWidgetDict->KeyExist("A"))
     return CPDF_Action(m_pWidgetDict->GetDictFor("A"));
 
   CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->GetDict(), "A");
-  if (!pObj)
-    return CPDF_Action();
-
-  return CPDF_Action(pObj->GetDict());
+  return CPDF_Action(pObj ? pObj->GetDict() : nullptr);
 }
 
 CPDF_AAction CPDF_FormControl::GetAdditionalAction() {
   if (!m_pWidgetDict)
-    return CPDF_AAction();
+    return CPDF_AAction(nullptr);
 
   if (m_pWidgetDict->KeyExist("AA"))
     return CPDF_AAction(m_pWidgetDict->GetDictFor("AA"));
diff --git a/fpdfsdk/cpdfsdk_baannot.cpp b/fpdfsdk/cpdfsdk_baannot.cpp
index c551fee..a157880 100644
--- a/fpdfsdk/cpdfsdk_baannot.cpp
+++ b/fpdfsdk/cpdfsdk_baannot.cpp
@@ -346,7 +346,7 @@
   if (eAAT == CPDF_AAction::ButtonUp)
     return GetAction();
 
-  return CPDF_Action();
+  return CPDF_Action(nullptr);
 }
 
 void CPDFSDK_BAAnnot::SetOpenState(bool bOpenState) {
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 65b75ca..ff82283 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -1030,7 +1030,7 @@
       break;
   }
 
-  return CPDF_Action();
+  return CPDF_Action(nullptr);
 }
 
 WideString CPDFSDK_Widget::GetAlternateName() const {
