diff --git a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
index ef9622d..6d6ca0e 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
@@ -39,7 +39,7 @@
     if (!indirect_obj)
       return;
 
-    contents_array = indirect_obj->AsMutableArray();
+    contents_array.Reset(indirect_obj->AsMutableArray());
     if (contents_array)
       contents_array_ = std::move(contents_array);
     else if (indirect_obj->IsStream())
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index ac90396..1d1227f 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -520,11 +520,11 @@
     ProcessNonbCJK(pBaseDict, pFont->IsBold(), pFont->IsItalic(), basefont,
                    std::move(pWidths));
   } else {
-    pFontDict = ProcessbCJK(
+    pFontDict.Reset(ProcessbCJK(
         pBaseDict, charset, basefont,
         [&pFont, &pEncoding](wchar_t start, wchar_t end, CPDF_Array* widthArr) {
           InsertWidthArray1(pFont.get(), pEncoding.get(), start, end, widthArr);
-        });
+        }));
   }
   int italicangle = pFont->GetSubstFontItalicAngle();
   FX_RECT bbox = pFont->GetBBox().value_or(FX_RECT());
@@ -619,11 +619,11 @@
     ProcessNonbCJK(pBaseDict, pLogFont->lfWeight > FW_MEDIUM,
                    pLogFont->lfItalic != 0, basefont, std::move(pWidths));
   } else {
-    pFontDict =
+    pFontDict.Reset(
         ProcessbCJK(pBaseDict, eCharset, basefont,
                     [&hDC](wchar_t start, wchar_t end, CPDF_Array* widthArr) {
                       InsertWidthArray(hDC, start, end, widthArr);
-                    });
+                    }));
   }
   auto pBBox = pdfium::MakeRetain<CPDF_Array>();
   for (int i = 0; i < 4; i++)
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 4da0e23..0094d40 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -629,7 +629,7 @@
     if (pCSObj->IsName()) {
       ByteString name = pCSObj->GetString();
       if (name != "DeviceRGB" && name != "DeviceGray" && name != "DeviceCMYK") {
-        pCSObj = FindResourceObj("ColorSpace", name);
+        pCSObj.Reset(FindResourceObj("ColorSpace", name));
         if (pCSObj && pCSObj->IsInline())
           pDict->SetFor("ColorSpace", pCSObj->Clone());
       }
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 1ed98c1..a4f80fd 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -241,7 +241,7 @@
       // If child did not finish, no pages to go, or max level reached, end
       if (m_pTreeTraversal.size() != level + 1 || *nPagesToGo == 0 ||
           m_bReachedMaxPageLevel) {
-        page = pageKid;
+        page.Reset(pageKid);
         break;
       }
     }
diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp
index e046947..1049589 100644
--- a/core/fpdfdoc/cpdf_annot.cpp
+++ b/core/fpdfdoc/cpdf_annot.cpp
@@ -458,8 +458,7 @@
     if (pBorderArray) {
       width = pBorderArray->GetFloatAt(2);
       if (pBorderArray->size() == 4) {
-        // TODO(tsepez): convert to retained in future CPDF_Dictionary CLs.
-        pDashArray = pBorderArray->GetArrayAt(3).Get();
+        pDashArray = pBorderArray->GetArrayAt(3);
         if (!pDashArray) {
           return;
         }
diff --git a/core/fpdfdoc/cpdf_bafontmap.cpp b/core/fpdfdoc/cpdf_bafontmap.cpp
index 4c851ba..fe7ef83 100644
--- a/core/fpdfdoc/cpdf_bafontmap.cpp
+++ b/core/fpdfdoc/cpdf_bafontmap.cpp
@@ -299,16 +299,15 @@
 
   RetainPtr<CPDF_Stream> pStream = pAPDict->GetMutableStreamFor(m_sAPType);
   if (!pStream) {
-    pStream = m_pDocument->NewIndirect<CPDF_Stream>();
+    pStream.Reset(m_pDocument->NewIndirect<CPDF_Stream>());
     pAPDict->SetNewFor<CPDF_Reference>(m_sAPType, m_pDocument.Get(),
                                        pStream->GetObjNum());
   }
 
   RetainPtr<CPDF_Dictionary> pStreamDict = pStream->GetMutableDict();
   if (!pStreamDict) {
-    auto pOwnedDict = m_pDocument->New<CPDF_Dictionary>();
-    pStreamDict = pOwnedDict.Get();
-    pStream->InitStream({}, std::move(pOwnedDict));
+    pStreamDict = m_pDocument->New<CPDF_Dictionary>();
+    pStream->InitStream({}, pStreamDict);
   }
 
   RetainPtr<CPDF_Dictionary> pStreamResList =
@@ -316,7 +315,7 @@
   RetainPtr<CPDF_Dictionary> pStreamResFontList =
       pStreamResList->GetMutableDictFor("Font");
   if (!pStreamResFontList) {
-    pStreamResFontList = m_pDocument->NewIndirect<CPDF_Dictionary>();
+    pStreamResFontList.Reset(m_pDocument->NewIndirect<CPDF_Dictionary>());
     pStreamResList->SetNewFor<CPDF_Reference>("Font", m_pDocument.Get(),
                                               pStreamResFontList->GetObjNum());
   }
diff --git a/core/fpdfdoc/cpdf_generateap.cpp b/core/fpdfdoc/cpdf_generateap.cpp
index 87b622e..ffcd95f 100644
--- a/core/fpdfdoc/cpdf_generateap.cpp
+++ b/core/fpdfdoc/cpdf_generateap.cpp
@@ -944,7 +944,7 @@
   RetainPtr<CPDF_Dictionary> pFontDict =
       pDRFontDict->GetMutableDictFor(font_name);
   if (!pFontDict) {
-    pFontDict = pDoc->NewIndirect<CPDF_Dictionary>();
+    pFontDict.Reset(pDoc->NewIndirect<CPDF_Dictionary>());
     pFontDict->SetNewFor<CPDF_Name>("Type", "Font");
     pFontDict->SetNewFor<CPDF_Name>("Subtype", "Type1");
     pFontDict->SetNewFor<CPDF_Name>("BaseFont", CFX_Font::kDefaultAnsiFontName);
@@ -1061,7 +1061,7 @@
       pAnnotDict->GetOrCreateDictFor(pdfium::annotation::kAP);
   RetainPtr<CPDF_Stream> pNormalStream = pAPDict->GetMutableStreamFor("N");
   if (!pNormalStream) {
-    pNormalStream = pDoc->NewIndirect<CPDF_Stream>();
+    pNormalStream.Reset(pDoc->NewIndirect<CPDF_Stream>());
     pAPDict->SetNewFor<CPDF_Reference>("N", pDoc, pNormalStream->GetObjNum());
   }
   RetainPtr<CPDF_Dictionary> pStreamDict = pNormalStream->GetMutableDict();
@@ -1075,7 +1075,8 @@
         if (!ValidateFontResourceDict(pStreamResFontList.Get()))
           return;
       } else {
-        pStreamResFontList = pStreamResList->SetNewFor<CPDF_Dictionary>("Font");
+        pStreamResFontList.Reset(
+            pStreamResList->SetNewFor<CPDF_Dictionary>("Font"));
       }
       if (!pStreamResFontList->KeyExist(font_name)) {
         pStreamResFontList->SetNewFor<CPDF_Reference>(font_name, pDoc,
@@ -1328,7 +1329,8 @@
     if (!ValidateFontResourceDict(pStreamResFontList.Get()))
       return;
   } else {
-    pStreamResFontList = pStreamResList->SetNewFor<CPDF_Dictionary>("Font");
+    pStreamResFontList.Reset(
+        pStreamResList->SetNewFor<CPDF_Dictionary>("Font"));
   }
 
   if (!pStreamResFontList->KeyExist(font_name)) {
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp
index 3df2f07..7eacf75 100644
--- a/core/fpdfdoc/cpdf_interactiveform.cpp
+++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -267,6 +267,7 @@
   return FX_GetCharsetFromCodePage(FX_GetACP());
 }
 
+// TODO(tsepez): return retained reference.
 CPDF_Dictionary* InitDict(CPDF_Document* pDocument) {
   CPDF_Dictionary* pFormDict = pDocument->NewIndirect<CPDF_Dictionary>();
   pDocument->GetMutableRoot()->SetNewFor<CPDF_Reference>(
@@ -569,7 +570,7 @@
   RetainPtr<CPDF_Dictionary> pFormDict =
       pDocument->GetMutableRoot()->GetMutableDictFor("AcroForm");
   if (!pFormDict)
-    pFormDict = InitDict(pDocument);
+    pFormDict.Reset(InitDict(pDocument));
 
   FX_Charset charSet = GetNativeCharSet();
   ByteString csTemp;
diff --git a/core/fpdfdoc/cpdf_nametree.cpp b/core/fpdfdoc/cpdf_nametree.cpp
index e5590ee..66fe5bc 100644
--- a/core/fpdfdoc/cpdf_nametree.cpp
+++ b/core/fpdfdoc/cpdf_nametree.cpp
@@ -323,7 +323,7 @@
     IndexSearchResult result;
     result.key = pNames->GetUnicodeTextAt(index);
     result.value = std::move(value);
-    result.container = pNames.Get();  // TODO(tsepez): retain result.
+    result.container = std::move(pNames);
     result.index = index;
     return result;
   }
@@ -444,14 +444,14 @@
   // Retrieve the document's Names dictionary; create it if missing.
   RetainPtr<CPDF_Dictionary> pNames = pRoot->GetMutableDictFor("Names");
   if (!pNames) {
-    pNames = pDoc->NewIndirect<CPDF_Dictionary>();
+    pNames.Reset(pDoc->NewIndirect<CPDF_Dictionary>());
     pRoot->SetNewFor<CPDF_Reference>("Names", pDoc, pNames->GetObjNum());
   }
 
   // Create the |category| dictionary if missing.
   RetainPtr<CPDF_Dictionary> pCategory = pNames->GetMutableDictFor(category);
   if (!pCategory) {
-    pCategory = pDoc->NewIndirect<CPDF_Dictionary>();
+    pCategory.Reset(pDoc->NewIndirect<CPDF_Dictionary>());
     pCategory->SetNewFor<CPDF_Array>("Names");
     pNames->SetNewFor<CPDF_Reference>(category, pDoc, pCategory->GetObjNum());
   }
diff --git a/core/fpdfdoc/cpdf_structelement.cpp b/core/fpdfdoc/cpdf_structelement.cpp
index ee6f548..11e47fe 100644
--- a/core/fpdfdoc/cpdf_structelement.cpp
+++ b/core/fpdfdoc/cpdf_structelement.cpp
@@ -85,7 +85,7 @@
   bool bSave = false;
   for (auto& kid : m_Kids) {
     if (kid.m_Type == Kid::kElement && kid.m_pDict == pDict) {
-      kid.m_pElement = pElement;
+      kid.m_pElement.Reset(pElement);
       bSave = true;
     }
   }
diff --git a/core/fxcrt/retain_ptr.h b/core/fxcrt/retain_ptr.h
index d227257..bbd4bce 100644
--- a/core/fxcrt/retain_ptr.h
+++ b/core/fxcrt/retain_ptr.h
@@ -92,12 +92,6 @@
     return *this;
   }
 
-  // Use sparingly, may produce reference count churn.
-  RetainPtr& operator=(T* that) {
-    Reset(that);
-    return *this;
-  }
-
   bool operator==(const RetainPtr& that) const { return Get() == that.Get(); }
   bool operator!=(const RetainPtr& that) const { return !(*this == that); }
 
diff --git a/core/fxcrt/retain_ptr_unittest.cpp b/core/fxcrt/retain_ptr_unittest.cpp
index 096c920..4985122 100644
--- a/core/fxcrt/retain_ptr_unittest.cpp
+++ b/core/fxcrt/retain_ptr_unittest.cpp
@@ -212,8 +212,9 @@
       EXPECT_EQ(0, obj.release_count());
     }
     {
+      // Test assignment from wrapped underlying type.
       RetainPtr<PseudoRetainable> ptr2;
-      ptr2 = ptr.Get();  // Test assignment from underlying type.
+      ptr2 = pdfium::WrapRetain(ptr.Get());
       EXPECT_EQ(3, obj.retain_count());
       EXPECT_EQ(1, obj.release_count());
     }
@@ -235,8 +236,9 @@
       EXPECT_EQ(0, obj.release_count());
     }
     {
+      // Test assignment from wrapped underlying type.
       RetainPtr<const PseudoRetainable> ptr2;
-      ptr2 = ptr.Get();  // Test assignment from underlying type.
+      ptr2 = pdfium::WrapRetain(ptr.Get());
       EXPECT_EQ(3, obj.retain_count());
       EXPECT_EQ(1, obj.release_count());
     }
diff --git a/fpdfsdk/cpdfsdk_appstream.cpp b/fpdfsdk/cpdfsdk_appstream.cpp
index 7cf03dd..cffecbf 100644
--- a/fpdfsdk/cpdfsdk_appstream.cpp
+++ b/fpdfsdk/cpdfsdk_appstream.cpp
@@ -1829,7 +1829,7 @@
   RetainPtr<CPDF_Dictionary> pParentDict;
   ByteString key;
   if (sAPState.IsEmpty()) {
-    pParentDict = dict_.Get();
+    pParentDict = dict_;
     key = sAPType;
   } else {
     pParentDict = dict_->GetOrCreateDictFor(sAPType);
@@ -1845,15 +1845,13 @@
   if (!doc->IsModifiedAPStream(pStream.Get())) {
     if (pStream)
       pOrigStreamDict = pStream->GetMutableDict();
-    pStream = doc->CreateModifiedAPStream();
+    pStream.Reset(doc->CreateModifiedAPStream());
     pParentDict->SetNewFor<CPDF_Reference>(key, doc, pStream->GetObjNum());
   }
 
   RetainPtr<CPDF_Dictionary> pStreamDict = pStream->GetMutableDict();
   if (!pStreamDict) {
-    auto pNewDict =
-        widget_->GetPDFAnnot()->GetDocument()->New<CPDF_Dictionary>();
-    pStreamDict = pNewDict.Get();
+    pStreamDict = widget_->GetPDFAnnot()->GetDocument()->New<CPDF_Dictionary>();
     pStreamDict->SetNewFor<CPDF_Name>("Type", "XObject");
     pStreamDict->SetNewFor<CPDF_Name>("Subtype", "Form");
     pStreamDict->SetNewFor<CPDF_Number>("FormType", 1);
@@ -1865,7 +1863,7 @@
         pStreamDict->SetFor("Resources", pResources->Clone());
     }
 
-    pStream->InitStream({}, std::move(pNewDict));
+    pStream->InitStream({}, pStreamDict);
   }
   pStreamDict->SetMatrixFor("Matrix", widget_->GetMatrix());
   pStreamDict->SetRectFor("BBox", widget_->GetRotatedRect());
diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp
index bed7b61..503dc5b 100644
--- a/fpdfsdk/fpdf_annot.cpp
+++ b/fpdfsdk/fpdf_annot.cpp
@@ -684,7 +684,7 @@
   if (pColor)
     pColor->Clear();
   else
-    pColor = pAnnotDict->SetNewFor<CPDF_Array>(key);
+    pColor.Reset(pAnnotDict->SetNewFor<CPDF_Array>(key));
 
   pColor->AppendNew<CPDF_Number>(R / 255.f);
   pColor->AppendNew<CPDF_Number>(G / 255.f);
@@ -797,7 +797,7 @@
   RetainPtr<CPDF_Array> pQuadPointsArray =
       GetMutableQuadPointsArrayFromDictionary(pAnnotDict.Get());
   if (!pQuadPointsArray)
-    pQuadPointsArray = AddQuadPointsArrayToDictionary(pAnnotDict.Get());
+    pQuadPointsArray.Reset(AddQuadPointsArrayToDictionary(pAnnotDict.Get()));
   AppendQuadPoints(pQuadPointsArray.Get(), quad_points);
   UpdateBBox(pAnnotDict.Get());
   return true;
@@ -1120,9 +1120,10 @@
     }
 
     // Storing reference to indirect object in annotation's AP
-    if (!pApDict)
-      pApDict = pAnnotDict->SetNewFor<CPDF_Dictionary>(pdfium::annotation::kAP);
-
+    if (!pApDict) {
+      pApDict.Reset(
+          pAnnotDict->SetNewFor<CPDF_Dictionary>(pdfium::annotation::kAP));
+    }
     pApDict->SetNewFor<CPDF_Reference>(modeKey, pDoc,
                                        pNewIndirectStream->GetObjNum());
   } else {
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index 3fde9c7..8352117 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -705,7 +705,7 @@
     if (pRectArray)
       pRectArray->Clear();
     else
-      pRectArray = pAnnotDict->SetNewFor<CPDF_Array>("Rect");
+      pRectArray.Reset(pAnnotDict->SetNewFor<CPDF_Array>("Rect"));
 
     pRectArray->AppendNew<CPDF_Number>(rect.left);
     pRectArray->AppendNew<CPDF_Number>(rect.bottom);
diff --git a/fpdfsdk/fpdf_flatten.cpp b/fpdfsdk/fpdf_flatten.cpp
index dd63a6e..c0a0b18 100644
--- a/fpdfsdk/fpdf_flatten.cpp
+++ b/fpdfsdk/fpdf_flatten.cpp
@@ -220,7 +220,7 @@
       sStream += "\nQ";
     }
     pContentsStream->SetDataAndRemoveFilter(sStream.raw_span());
-    pContentsArray = pDocument->NewIndirect<CPDF_Array>();
+    pContentsArray.Reset(pDocument->NewIndirect<CPDF_Array>());
     pContentsArray->AppendNew<CPDF_Reference>(pDocument,
                                               pContentsStream->GetObjNum());
     pPage->SetNewFor<CPDF_Reference>(pdfium::page_object::kContents, pDocument,
@@ -360,7 +360,7 @@
               pFirstObj = pFirstObj->GetMutableDirect();
             if (!pFirstObj->IsStream())
               continue;
-            pAPStream = pFirstObj->AsMutableStream();
+            pAPStream.Reset(pFirstObj->AsMutableStream());
           }
         }
       }
@@ -381,9 +381,8 @@
 
     RetainPtr<CPDF_Object> pObj = pAPStream;
     if (pObj->IsInline()) {
-      RetainPtr<CPDF_Object> pNew = pObj->Clone();
-      pObj = pNew.Get();
-      pDocument->AddIndirectObject(std::move(pNew));
+      pObj = pObj->Clone();
+      pDocument->AddIndirectObject(pObj);
     }
 
     RetainPtr<CPDF_Dictionary> pObjDict = pObj->GetMutableDict();
diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp
index 8ba338e..53459be 100644
--- a/fpdfsdk/fpdf_ppo.cpp
+++ b/fpdfsdk/fpdf_ppo.cpp
@@ -269,7 +269,7 @@
   RetainPtr<CPDF_Dictionary> pNewPages =
       pElement ? ToDictionary(pElement->GetMutableDirect()) : nullptr;
   if (!pNewPages) {
-    pNewPages = dest()->NewIndirect<CPDF_Dictionary>();
+    pNewPages.Reset(dest()->NewIndirect<CPDF_Dictionary>());
     pNewRoot->SetNewFor<CPDF_Reference>("Pages", dest(),
                                         pNewPages->GetObjNum());
   }
@@ -666,7 +666,7 @@
   auto src_page = pdfium::MakeRetain<CPDF_Page>(src(), src_page_dict);
   auto xobject = std::make_unique<XObjectContext>();
   xobject->dest_doc = dest();
-  xobject->xobject = MakeXObjectFromPageRaw(src_page);
+  xobject->xobject.Reset(MakeXObjectFromPageRaw(src_page));
   return xobject;
 }
 
diff --git a/fpdfsdk/fpdf_save.cpp b/fpdfsdk/fpdf_save.cpp
index 7672057..a2d9d04 100644
--- a/fpdfsdk/fpdf_save.cpp
+++ b/fpdfsdk/fpdf_save.cpp
@@ -82,10 +82,10 @@
     if (pFormPDFObj->IsReference()) {
       RetainPtr<CPDF_Object> pFormDirectObj = pFormPDFObj->GetMutableDirect();
       if (pFormDirectObj && pFormDirectObj->IsStream()) {
-        pFormStream = pFormDirectObj->AsMutableStream();
+        pFormStream.Reset(pFormDirectObj->AsMutableStream());
       }
     } else if (pFormPDFObj->IsStream()) {
-      pFormStream = pFormPDFObj->AsMutableStream();
+      pFormStream.Reset(pFormPDFObj->AsMutableStream());
     }
   }
 
@@ -99,10 +99,10 @@
       RetainPtr<CPDF_Object> pDataSetsDirectObj =
           pDataSetsRefObj->GetMutableDirect();
       if (pDataSetsDirectObj && pDataSetsDirectObj->IsStream()) {
-        pDataSetsStream = pDataSetsDirectObj->AsMutableStream();
+        pDataSetsStream.Reset(pDataSetsDirectObj->AsMutableStream());
       }
     } else if (pDataSetsPDFObj->IsStream()) {
-      pDataSetsStream = pDataSetsPDFObj->AsMutableStream();
+      pDataSetsStream.Reset(pDataSetsPDFObj->AsMutableStream());
     }
   }
   // L"datasets"
diff --git a/fpdfsdk/fpdf_transformpage.cpp b/fpdfsdk/fpdf_transformpage.cpp
index 8e5413c..3b64868 100644
--- a/fpdfsdk/fpdf_transformpage.cpp
+++ b/fpdfsdk/fpdf_transformpage.cpp
@@ -241,7 +241,7 @@
     pContentArray->InsertNewAt<CPDF_Reference>(0, pDoc, pStream->GetObjNum());
     pContentArray->AppendNew<CPDF_Reference>(pDoc, pEndStream->GetObjNum());
   } else if (pContentObj->IsStream() && !pContentObj->IsInline()) {
-    pContentArray = pDoc->NewIndirect<CPDF_Array>();
+    pContentArray.Reset(pDoc->NewIndirect<CPDF_Array>());
     pContentArray->AppendNew<CPDF_Reference>(pDoc, pStream->GetObjNum());
     pContentArray->AppendNew<CPDF_Reference>(pDoc, pContentObj->GetObjNum());
     pContentArray->AppendNew<CPDF_Reference>(pDoc, pEndStream->GetObjNum());
@@ -267,7 +267,7 @@
 
     RetainPtr<CPDF_Dictionary> pDict;
     if (pObj->IsDictionary())
-      pDict = pObj->AsMutableDictionary();
+      pDict.Reset(pObj->AsMutableDictionary());
     else if (CPDF_Stream* pObjStream = pObj->AsMutableStream())
       pDict = pObjStream->GetMutableDict();
     else
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 4c653af..90d0f68 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -1154,14 +1154,14 @@
     CPDF_DictionaryLocker locker(pDest);
     for (const auto& it : locker) {
       bsName = it.first.AsStringView();
-      pDestObj = it.second.Get();
+      pDestObj = it.second;
       if (i == index)
         break;
       i++;
     }
     wsName = PDF_DecodeText(bsName.raw_span());
   } else {
-    pDestObj = name_tree->LookupValueAndName(index, &wsName);
+    pDestObj.Reset(name_tree->LookupValueAndName(index, &wsName));
   }
   if (!pDestObj)
     return nullptr;
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp
index e16e7e6..a177ed4 100644
--- a/xfa/fxfa/cxfa_ffdoc.cpp
+++ b/xfa/fxfa/cxfa_ffdoc.cpp
@@ -285,9 +285,10 @@
   if (!pObject) {
     for (size_t i = 0; i < count; ++i) {
       WideString wsTemp;
+      // TODO(tsepez): return retained object.
       CPDF_Object* pTempObject = name_tree->LookupValueAndName(i, &wsTemp);
       if (wsTemp == wsName) {
-        pObject = pTempObject;
+        pObject.Reset(pTempObject);
         break;
       }
     }
