Remove default level from FPDF_GetFieldAttr().

Make call into internal helper function.
Write helper function so as to be obviously tail-recursive,
and remove redundant null check.

Change-Id: If29f9be66b07239b35de9ac9241d5ef72365889b
Reviewed-on: https://pdfium-review.googlesource.com/40130
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index c88513d..678a66a 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -43,6 +43,21 @@
   return (pField->GetFieldFlags() & 0x2000000) != 0;
 }
 
+const CPDF_Object* FPDF_GetFieldAttrRecursive(const CPDF_Dictionary* pFieldDict,
+                                              const char* name,
+                                              int nLevel) {
+  static constexpr int kGetFieldMaxRecursion = 32;
+  if (!pFieldDict || nLevel > kGetFieldMaxRecursion)
+    return nullptr;
+
+  const CPDF_Object* pAttr = pFieldDict->GetDirectObjectFor(name);
+  if (pAttr)
+    return pAttr;
+
+  return FPDF_GetFieldAttrRecursive(pFieldDict->GetDictFor("Parent"), name,
+                                    nLevel + 1);
+}
+
 }  // namespace
 
 Optional<FormFieldType> IntToFormFieldType(int value) {
@@ -54,25 +69,13 @@
 }
 
 const CPDF_Object* FPDF_GetFieldAttr(const CPDF_Dictionary* pFieldDict,
-                                     const char* name,
-                                     int nLevel) {
-  static constexpr int kGetFieldMaxRecursion = 32;
-  if (!pFieldDict || nLevel > kGetFieldMaxRecursion)
-    return nullptr;
-
-  const CPDF_Object* pAttr = pFieldDict->GetDirectObjectFor(name);
-  if (pAttr)
-    return pAttr;
-
-  const CPDF_Dictionary* pParent = pFieldDict->GetDictFor("Parent");
-  return pParent ? FPDF_GetFieldAttr(pParent, name, nLevel + 1) : nullptr;
+                                     const char* name) {
+  return FPDF_GetFieldAttrRecursive(pFieldDict, name, 0);
 }
 
-CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict,
-                               const char* name,
-                               int nLevel) {
-  return const_cast<CPDF_Object*>(FPDF_GetFieldAttr(
-      static_cast<const CPDF_Dictionary*>(pFieldDict), name, nLevel));
+CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const char* name) {
+  return const_cast<CPDF_Object*>(FPDF_GetFieldAttrRecursive(
+      static_cast<const CPDF_Dictionary*>(pFieldDict), name, 0));
 }
 
 WideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict) {
diff --git a/core/fpdfdoc/cpdf_formfield.h b/core/fpdfdoc/cpdf_formfield.h
index b6a4ed8..6f00065 100644
--- a/core/fpdfdoc/cpdf_formfield.h
+++ b/core/fpdfdoc/cpdf_formfield.h
@@ -80,11 +80,8 @@
 class CPDF_String;
 
 const CPDF_Object* FPDF_GetFieldAttr(const CPDF_Dictionary* pFieldDict,
-                                     const char* name,
-                                     int nLevel = 0);
-CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict,
-                               const char* name,
-                               int nLevel = 0);
+                                     const char* name);
+CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const char* name);
 
 WideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict);