Add a wrapper for SearchNameNodeByIndex().
The existing recursive SearchNameNodeByIndex() becomes the internal
version, while a new wrapper takes its place with simplified parameters.
Change-Id: Id0ef192ded9ca43594bf31b932e638812e5fd891
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/86935
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfdoc/cpdf_nametree.cpp b/core/fpdfdoc/cpdf_nametree.cpp
index bda18b4..ab5d59c 100644
--- a/core/fpdfdoc/cpdf_nametree.cpp
+++ b/core/fpdfdoc/cpdf_nametree.cpp
@@ -243,13 +243,13 @@
// successful, return the value object; |csName| will be the key, |ppFind|
// will be the leaf array that this pair is in, and |pFindIndex| will be the
// index of the pair in |pFind|.
-CPDF_Object* SearchNameNodeByIndex(CPDF_Dictionary* pNode,
- size_t nIndex,
- int nLevel,
- size_t* nCurIndex,
- WideString* csName,
- CPDF_Array** ppFind,
- int* pFindIndex) {
+CPDF_Object* SearchNameNodeByIndexInternal(CPDF_Dictionary* pNode,
+ size_t nIndex,
+ int nLevel,
+ size_t* nCurIndex,
+ WideString* csName,
+ CPDF_Array** ppFind,
+ int* pFindIndex) {
if (nLevel > kNameTreeMaxRecursion)
return nullptr;
@@ -277,7 +277,7 @@
CPDF_Dictionary* pKid = pKids->GetDictAt(i);
if (!pKid)
continue;
- CPDF_Object* pFound = SearchNameNodeByIndex(
+ CPDF_Object* pFound = SearchNameNodeByIndexInternal(
pKid, nIndex, nLevel + 1, nCurIndex, csName, ppFind, pFindIndex);
if (pFound)
return pFound;
@@ -285,6 +285,18 @@
return nullptr;
}
+// Wrapper for SearchNameNodeByIndexInternal() so callers do not need to know
+// about the details.
+CPDF_Object* SearchNameNodeByIndex(CPDF_Dictionary* pNode,
+ size_t nIndex,
+ WideString* csName,
+ CPDF_Array** ppFind,
+ int* pFindIndex) {
+ size_t nCurIndex = 0;
+ return SearchNameNodeByIndexInternal(pNode, nIndex, 0, &nCurIndex, csName,
+ ppFind, pFindIndex);
+}
+
// Get the total number of key-value pairs in the tree with root |pNode|.
size_t CountNamesInternal(CPDF_Dictionary* pNode, int nLevel) {
if (nLevel > kNameTreeMaxRecursion)
@@ -428,10 +440,8 @@
// |name| into. We instead will find the leftmost leaf array in which to place
// |name| and |pObj|.
if (!pFind) {
- size_t nCurIndex = 0;
WideString csName;
- SearchNameNodeByIndex(m_pRoot.Get(), 0, 0, &nCurIndex, &csName, &pFind,
- nullptr);
+ SearchNameNodeByIndex(m_pRoot.Get(), 0, &csName, &pFind, nullptr);
}
// Give up if that fails too.
if (!pFind)
@@ -462,13 +472,12 @@
}
bool CPDF_NameTree::DeleteValueAndName(int nIndex) {
- size_t nCurIndex = 0;
WideString csName;
CPDF_Array* pFind = nullptr;
int nFindIndex = -1;
// Fail if the tree does not contain |nIndex|.
- if (!SearchNameNodeByIndex(m_pRoot.Get(), nIndex, 0, &nCurIndex, &csName,
- &pFind, &nFindIndex)) {
+ if (!SearchNameNodeByIndex(m_pRoot.Get(), nIndex, &csName, &pFind,
+ &nFindIndex)) {
return false;
}
@@ -484,9 +493,7 @@
CPDF_Object* CPDF_NameTree::LookupValueAndName(int nIndex,
WideString* csName) const {
csName->clear();
- size_t nCurIndex = 0;
- return SearchNameNodeByIndex(m_pRoot.Get(), nIndex, 0, &nCurIndex, csName,
- nullptr, nullptr);
+ return SearchNameNodeByIndex(m_pRoot.Get(), nIndex, csName, nullptr, nullptr);
}
CPDF_Object* CPDF_NameTree::LookupValue(const WideString& csName) const {