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 =