Use fewer mutable objects in CPDF_NameTree.
Change-Id: I707d9eeb366922e97ed220ac3bc944831b46e7ea
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/94675
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfdoc/cpdf_nametree.cpp b/core/fpdfdoc/cpdf_nametree.cpp
index c113872..06e18ed 100644
--- a/core/fpdfdoc/cpdf_nametree.cpp
+++ b/core/fpdfdoc/cpdf_nametree.cpp
@@ -172,7 +172,7 @@
// will be the index of |csName| in |ppFind|. If |csName| is not found, |ppFind|
// will be the leaf array that |csName| should be added to, and |pFindIndex|
// will be the index that it should be added at.
-RetainPtr<CPDF_Object> SearchNameNodeByNameInternal(
+const CPDF_Object* SearchNameNodeByNameInternal(
const RetainPtr<CPDF_Dictionary>& pNode,
const WideString& csName,
int nLevel,
@@ -219,7 +219,7 @@
continue;
*nIndex += i;
- return pNames->GetMutableDirectObjectAt(i * 2 + 1);
+ return pNames->GetDirectObjectAt(i * 2 + 1);
}
*nIndex += dwCount;
return nullptr;
@@ -235,7 +235,7 @@
if (!pKid)
continue;
- RetainPtr<CPDF_Object> pFound = SearchNameNodeByNameInternal(
+ const CPDF_Object* pFound = SearchNameNodeByNameInternal(
pKid, csName, nLevel + 1, nIndex, ppFind, pFindIndex);
if (pFound)
return pFound;
@@ -245,11 +245,10 @@
// Wrapper for SearchNameNodeByNameInternal() so callers do not need to know
// about the details.
-RetainPtr<CPDF_Object> SearchNameNodeByName(
- const RetainPtr<CPDF_Dictionary>& pNode,
- const WideString& csName,
- RetainPtr<CPDF_Array>* ppFind,
- int* pFindIndex) {
+const CPDF_Object* SearchNameNodeByName(const RetainPtr<CPDF_Dictionary>& pNode,
+ const WideString& csName,
+ RetainPtr<CPDF_Array>* ppFind,
+ int* pFindIndex) {
size_t nIndex = 0;
return SearchNameNodeByNameInternal(pNode, csName, 0, &nIndex, ppFind,
pFindIndex);
@@ -540,13 +539,11 @@
return result.value().value.Get();
}
-RetainPtr<CPDF_Object> CPDF_NameTree::LookupValue(
- const WideString& csName) const {
+const CPDF_Object* CPDF_NameTree::LookupValue(const WideString& csName) const {
return SearchNameNodeByName(m_pRoot, csName, nullptr, nullptr);
}
const CPDF_Array* CPDF_NameTree::LookupNewStyleNamedDest(
const ByteString& sName) {
- return GetNamedDestFromObject(
- LookupValue(PDF_DecodeText(sName.raw_span())).Get());
+ return GetNamedDestFromObject(LookupValue(PDF_DecodeText(sName.raw_span())));
}
diff --git a/core/fpdfdoc/cpdf_nametree.h b/core/fpdfdoc/cpdf_nametree.h
index 9ee41e2..4e30dce 100644
--- a/core/fpdfdoc/cpdf_nametree.h
+++ b/core/fpdfdoc/cpdf_nametree.h
@@ -45,7 +45,7 @@
bool DeleteValueAndName(size_t nIndex);
CPDF_Object* LookupValueAndName(size_t nIndex, WideString* csName) const;
- RetainPtr<CPDF_Object> LookupValue(const WideString& csName) const;
+ const CPDF_Object* LookupValue(const WideString& csName) const;
size_t GetCount() const;
CPDF_Dictionary* GetRootForTesting() const { return m_pRoot.Get(); }
diff --git a/core/fpdfdoc/cpdf_nametree_unittest.cpp b/core/fpdfdoc/cpdf_nametree_unittest.cpp
index 2c34ac7..b0c0d60 100644
--- a/core/fpdfdoc/cpdf_nametree_unittest.cpp
+++ b/core/fpdfdoc/cpdf_nametree_unittest.cpp
@@ -120,7 +120,7 @@
EXPECT_STREQ(L"1", stored_name.c_str());
// Check that the correct value object can be obtained by looking up "1".
- RetainPtr<CPDF_Number> pNumber = ToNumber(name_tree->LookupValue(L"1"));
+ const CPDF_Number* pNumber = ToNumber(name_tree->LookupValue(L"1"));
ASSERT_TRUE(pNumber);
EXPECT_EQ(100, pNumber->GetInteger());
}
@@ -142,7 +142,7 @@
std::unique_ptr<CPDF_NameTree> name_tree =
CPDF_NameTree::CreateForTesting(pRootDict.Get());
- RetainPtr<CPDF_Number> pNumber = ToNumber(name_tree->LookupValue(L"9.txt"));
+ const CPDF_Number* pNumber = ToNumber(name_tree->LookupValue(L"9.txt"));
ASSERT_TRUE(pNumber);
EXPECT_EQ(999, pNumber->GetInteger());
CheckLimitsArray(pKid1.Get(), "1.txt", "9.txt");
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp
index df5be9d..2d90c6a 100644
--- a/xfa/fxfa/cxfa_ffdoc.cpp
+++ b/xfa/fxfa/cxfa_ffdoc.cpp
@@ -279,7 +279,7 @@
if (count == 0)
return nullptr;
- RetainPtr<CPDF_Object> pObject = name_tree->LookupValue(WideString(wsName));
+ const CPDF_Object* pObject = name_tree->LookupValue(WideString(wsName));
if (!pObject) {
for (size_t i = 0; i < count; ++i) {
WideString wsTemp;
@@ -291,11 +291,11 @@
}
}
- RetainPtr<CPDF_Stream> pStream = ToStream(pObject);
+ const CPDF_Stream* pStream = ToStream(pObject);
if (!pStream)
return nullptr;
- auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream.Get());
+ auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream);
pAcc->LoadAllDataFiltered();
auto pImageFileRead =