Make looking up named Dests a const operation.

Change-Id: Iabfd2db75ccd526e05b24c98dbb272c196534eb0
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/94674
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 87d9972..c113872 100644
--- a/core/fpdfdoc/cpdf_nametree.cpp
+++ b/core/fpdfdoc/cpdf_nametree.cpp
@@ -353,25 +353,24 @@
   return nCount;
 }
 
-CPDF_Array* GetNamedDestFromObject(CPDF_Object* obj) {
+const CPDF_Array* GetNamedDestFromObject(const CPDF_Object* obj) {
   if (!obj)
     return nullptr;
-  CPDF_Array* array = obj->AsArray();
+  const CPDF_Array* array = obj->AsArray();
   if (array)
     return array;
-  CPDF_Dictionary* dict = obj->AsDictionary();
+  const CPDF_Dictionary* dict = obj->AsDictionary();
   if (dict)
-    return dict->GetMutableArrayFor("D").Get();  // TODO(tsepez): retain.
+    return dict->GetArrayFor("D");
   return nullptr;
 }
 
-CPDF_Array* LookupOldStyleNamedDest(CPDF_Document* pDoc,
-                                    const ByteString& name) {
-  RetainPtr<CPDF_Dictionary> pDests =
-      pDoc->GetMutableRoot()->GetMutableDictFor("Dests");
+const CPDF_Array* LookupOldStyleNamedDest(CPDF_Document* pDoc,
+                                          const ByteString& name) {
+  const CPDF_Dictionary* pDests = pDoc->GetRoot()->GetDictFor("Dests");
   if (!pDests)
     return nullptr;
-  return GetNamedDestFromObject(pDests->GetMutableDirectObjectFor(name).Get());
+  return GetNamedDestFromObject(pDests->GetDirectObjectFor(name));
 }
 
 }  // namespace
@@ -437,9 +436,9 @@
 }
 
 // static
-CPDF_Array* CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc,
-                                           const ByteString& name) {
-  CPDF_Array* dest_array = nullptr;
+const CPDF_Array* CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc,
+                                                 const ByteString& name) {
+  const CPDF_Array* dest_array = nullptr;
   std::unique_ptr<CPDF_NameTree> name_tree = Create(pDoc, "Dests");
   if (name_tree)
     dest_array = name_tree->LookupNewStyleNamedDest(name);
@@ -546,7 +545,8 @@
   return SearchNameNodeByName(m_pRoot, csName, nullptr, nullptr);
 }
 
-CPDF_Array* CPDF_NameTree::LookupNewStyleNamedDest(const ByteString& sName) {
+const CPDF_Array* CPDF_NameTree::LookupNewStyleNamedDest(
+    const ByteString& sName) {
   return GetNamedDestFromObject(
       LookupValue(PDF_DecodeText(sName.raw_span())).Get());
 }
diff --git a/core/fpdfdoc/cpdf_nametree.h b/core/fpdfdoc/cpdf_nametree.h
index 144fd9e..9ee41e2 100644
--- a/core/fpdfdoc/cpdf_nametree.h
+++ b/core/fpdfdoc/cpdf_nametree.h
@@ -38,8 +38,8 @@
   static std::unique_ptr<CPDF_NameTree> CreateForTesting(
       CPDF_Dictionary* pRoot);
 
-  static CPDF_Array* LookupNamedDest(CPDF_Document* doc,
-                                     const ByteString& name);
+  static const CPDF_Array* LookupNamedDest(CPDF_Document* doc,
+                                           const ByteString& name);
 
   bool AddValueAndName(RetainPtr<CPDF_Object> pObj, const WideString& name);
   bool DeleteValueAndName(size_t nIndex);
@@ -53,7 +53,7 @@
  private:
   explicit CPDF_NameTree(RetainPtr<CPDF_Dictionary> pRoot);
 
-  CPDF_Array* LookupNewStyleNamedDest(const ByteString& name);
+  const CPDF_Array* LookupNewStyleNamedDest(const ByteString& name);
 
   RetainPtr<CPDF_Dictionary> const m_pRoot;
 };
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 83e61eb..d06db72 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -1381,7 +1381,7 @@
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
   CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
-  CPDF_Array* dest_array = CPDF_NameTree::LookupNamedDest(
+  const CPDF_Array* dest_array = CPDF_NameTree::LookupNamedDest(
       pDocument, pRuntime->ToByteString(params[0]));
   if (!dest_array)
     return CJS_Result::Failure(JSMessage::kBadObjectError);