Fix retained argument TODOs, part 3.

Return retained arguments from CPDF_Parser methods.

Change-Id: I659cc02d83c7416e3a144c7b4d18b10a9d6d84a1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/98610
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index d734fcc..64a718f 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -855,14 +855,13 @@
   return GetTrailer() ? GetTrailer()->GetArrayFor("ID") : nullptr;
 }
 
-// TODO(tsepez): return retained object, though not clear if it can change.
-const CPDF_Dictionary* CPDF_Parser::GetRoot() const {
+RetainPtr<const CPDF_Dictionary> CPDF_Parser::GetRoot() const {
   RetainPtr<CPDF_Object> obj =
       m_pObjectsHolder->GetOrParseIndirectObject(GetRootObjNum());
-  return obj ? obj->GetDict().Get() : nullptr;
+  return obj ? obj->GetDict() : nullptr;
 }
 
-const CPDF_Dictionary* CPDF_Parser::GetEncryptDict() const {
+RetainPtr<const CPDF_Dictionary> CPDF_Parser::GetEncryptDict() const {
   if (!GetTrailer())
     return nullptr;
 
@@ -872,13 +871,11 @@
     return nullptr;
 
   if (pEncryptObj->IsDictionary())
-    return pEncryptObj->AsDictionary();
+    return pdfium::WrapRetain(pEncryptObj->AsDictionary());
 
   if (pEncryptObj->IsReference()) {
-    // TODO(tsepez): return retained object.
     return ToDictionary(m_pObjectsHolder->GetOrParseIndirectObject(
-                            pEncryptObj->AsReference()->GetRefObjNum()))
-        .Get();
+        pEncryptObj->AsReference()->GetRefObjNum()));
   }
   return nullptr;
 }
diff --git a/core/fpdfapi/parser/cpdf_parser.h b/core/fpdfapi/parser/cpdf_parser.h
index b39c749..0d87606 100644
--- a/core/fpdfapi/parser/cpdf_parser.h
+++ b/core/fpdfapi/parser/cpdf_parser.h
@@ -89,8 +89,8 @@
   uint32_t GetRootObjNum() const;
   uint32_t GetInfoObjNum() const;
   RetainPtr<const CPDF_Array> GetIDArray() const;
-  const CPDF_Dictionary* GetRoot() const;
-  const CPDF_Dictionary* GetEncryptDict() const;
+  RetainPtr<const CPDF_Dictionary> GetRoot() const;
+  RetainPtr<const CPDF_Dictionary> GetEncryptDict() const;
 
   RetainPtr<CPDF_Object> ParseIndirectObject(uint32_t objnum);