Fix retained argument TODOs, part 5. Update CPDF_NameTree and CPDF_DocPageData methods, and functions in file cpdfsdk_helpers.h. Change-Id: I64313c4f181cf2684ac38bbc803e6d2f1b52b756 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/98617 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp index 4f6cd83..ce3c084 100644 --- a/core/fpdfapi/page/cpdf_docpagedata.cpp +++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -119,7 +119,7 @@ return flags; } -void ProcessNonbCJK(const RetainPtr<CPDF_Dictionary>& pBaseDict, +void ProcessNonbCJK(RetainPtr<CPDF_Dictionary> pBaseDict, bool bold, bool italic, ByteString basefont, @@ -519,11 +519,11 @@ ProcessNonbCJK(pBaseDict, pFont->IsBold(), pFont->IsItalic(), basefont, std::move(pWidths)); } else { - pFontDict.Reset(ProcessbCJK( + pFontDict = 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()); @@ -617,11 +617,11 @@ ProcessNonbCJK(pBaseDict, pLogFont->lfWeight > FW_MEDIUM, pLogFont->lfItalic != 0, basefont, std::move(pWidths)); } else { - pFontDict.Reset( + pFontDict = 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++) @@ -668,9 +668,8 @@ return i; } -// TODO(tsepez): return retained reference. -CPDF_Dictionary* CPDF_DocPageData::ProcessbCJK( - const RetainPtr<CPDF_Dictionary>& pBaseDict, +RetainPtr<CPDF_Dictionary> CPDF_DocPageData::ProcessbCJK( + RetainPtr<CPDF_Dictionary> pBaseDict, FX_Charset charset, ByteString basefont, std::function<void(wchar_t, wchar_t, CPDF_Array*)> Insert) { @@ -733,5 +732,5 @@ auto pArray = pBaseDict->SetNewFor<CPDF_Array>("DescendantFonts"); pArray->AppendNew<CPDF_Reference>(GetDocument(), pFontDict->GetObjNum()); - return pFontDict.Get(); + return pFontDict; }
diff --git a/core/fpdfapi/page/cpdf_docpagedata.h b/core/fpdfapi/page/cpdf_docpagedata.h index 8767392..d38eb42 100644 --- a/core/fpdfapi/page/cpdf_docpagedata.h +++ b/core/fpdfapi/page/cpdf_docpagedata.h
@@ -100,8 +100,8 @@ std::set<const CPDF_Object*>* pVisitedInternal); size_t CalculateEncodingDict(FX_Charset charset, CPDF_Dictionary* pBaseDict); - CPDF_Dictionary* ProcessbCJK( - const RetainPtr<CPDF_Dictionary>& pBaseDict, + RetainPtr<CPDF_Dictionary> ProcessbCJK( + RetainPtr<CPDF_Dictionary> pBaseDict, FX_Charset charset, ByteString basefont, std::function<void(wchar_t, wchar_t, CPDF_Array*)> Insert);
diff --git a/core/fpdfdoc/cpdf_nametree.cpp b/core/fpdfdoc/cpdf_nametree.cpp index 8d95dd4..fc70a52 100644 --- a/core/fpdfdoc/cpdf_nametree.cpp +++ b/core/fpdfdoc/cpdf_nametree.cpp
@@ -559,8 +559,9 @@ return true; } -CPDF_Object* CPDF_NameTree::LookupValueAndName(size_t nIndex, - WideString* csName) const { +RetainPtr<CPDF_Object> CPDF_NameTree::LookupValueAndName( + size_t nIndex, + WideString* csName) const { absl::optional<IndexSearchResult> result = SearchNameNodeByIndex(m_pRoot.Get(), nIndex); if (!result) { @@ -569,7 +570,7 @@ } *csName = std::move(result.value().key); - return result.value().value.Get(); + return result.value().value; } RetainPtr<const CPDF_Object> CPDF_NameTree::LookupValue(
diff --git a/core/fpdfdoc/cpdf_nametree.h b/core/fpdfdoc/cpdf_nametree.h index 2ae2a89..ea6f88f 100644 --- a/core/fpdfdoc/cpdf_nametree.h +++ b/core/fpdfdoc/cpdf_nametree.h
@@ -44,7 +44,8 @@ bool AddValueAndName(RetainPtr<CPDF_Object> pObj, const WideString& name); bool DeleteValueAndName(size_t nIndex); - CPDF_Object* LookupValueAndName(size_t nIndex, WideString* csName) const; + RetainPtr<CPDF_Object> LookupValueAndName(size_t nIndex, + WideString* csName) const; RetainPtr<const CPDF_Object> LookupValue(const WideString& csName) const; size_t GetCount() const;
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp index 269fc4b..adbe03a 100644 --- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp +++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -649,8 +649,7 @@ size_t count = name_tree->GetCount(); for (size_t i = 0; i < count; ++i) { WideString name; - CPDF_Action action(ToDictionary( - pdfium::WrapRetain(name_tree->LookupValueAndName(i, &name)))); + CPDF_Action action(ToDictionary(name_tree->LookupValueAndName(i, &name))); DoActionJavaScript(action, name); } }
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp index a61e430..35636af 100644 --- a/fpdfsdk/cpdfsdk_helpers.cpp +++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -224,16 +224,15 @@ } #endif // PDF_ENABLE_XFA -const CPDF_Array* GetQuadPointsArrayFromDictionary( +RetainPtr<const CPDF_Array> GetQuadPointsArrayFromDictionary( const CPDF_Dictionary* dict) { - // TODO(tsepez): return retained object. - return dict->GetArrayFor("QuadPoints").Get(); + return dict->GetArrayFor("QuadPoints"); } RetainPtr<CPDF_Array> GetMutableQuadPointsArrayFromDictionary( CPDF_Dictionary* dict) { return pdfium::WrapRetain( - const_cast<CPDF_Array*>(GetQuadPointsArrayFromDictionary(dict))); + const_cast<CPDF_Array*>(GetQuadPointsArrayFromDictionary(dict).Get())); } RetainPtr<CPDF_Array> AddQuadPointsArrayToDictionary(CPDF_Dictionary* dict) { @@ -244,7 +243,7 @@ return array && index < array->size() / 8; } -bool GetQuadPointsAtIndex(const CPDF_Array* array, +bool GetQuadPointsAtIndex(RetainPtr<const CPDF_Array> array, size_t quad_index, FS_QUADPOINTSF* quad_points) { DCHECK(quad_points);
diff --git a/fpdfsdk/cpdfsdk_helpers.h b/fpdfsdk/cpdfsdk_helpers.h index d722ecc..6724f61 100644 --- a/fpdfsdk/cpdfsdk_helpers.h +++ b/fpdfsdk/cpdfsdk_helpers.h
@@ -248,12 +248,13 @@ FPDF_FILEHANDLER* pFileHandler); #endif // PDF_ENABLE_XFA -const CPDF_Array* GetQuadPointsArrayFromDictionary(const CPDF_Dictionary* dict); +RetainPtr<const CPDF_Array> GetQuadPointsArrayFromDictionary( + const CPDF_Dictionary* dict); RetainPtr<CPDF_Array> GetMutableQuadPointsArrayFromDictionary( CPDF_Dictionary* dict); RetainPtr<CPDF_Array> AddQuadPointsArrayToDictionary(CPDF_Dictionary* dict); bool IsValidQuadPointsIndex(const CPDF_Array* array, size_t index); -bool GetQuadPointsAtIndex(const CPDF_Array* array, +bool GetQuadPointsAtIndex(RetainPtr<const CPDF_Array> array, size_t quad_index, FS_QUADPOINTSF* quad_points);
diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp index dda378c..2d5fe54 100644 --- a/fpdfsdk/fpdf_annot.cpp +++ b/fpdfsdk/fpdf_annot.cpp
@@ -809,7 +809,8 @@ const CPDF_Dictionary* pAnnotDict = CPDFAnnotContextFromFPDFAnnotation(annot)->GetAnnotDict(); - const CPDF_Array* pArray = GetQuadPointsArrayFromDictionary(pAnnotDict); + RetainPtr<const CPDF_Array> pArray = + GetQuadPointsArrayFromDictionary(pAnnotDict); return pArray ? pArray->size() / 8 : 0; } @@ -822,11 +823,12 @@ const CPDF_Dictionary* pAnnotDict = CPDFAnnotContextFromFPDFAnnotation(annot)->GetAnnotDict(); - const CPDF_Array* pArray = GetQuadPointsArrayFromDictionary(pAnnotDict); + RetainPtr<const CPDF_Array> pArray = + GetQuadPointsArrayFromDictionary(pAnnotDict); if (!pArray) return false; - return GetQuadPointsAtIndex(pArray, quad_index, quad_points); + return GetQuadPointsAtIndex(std::move(pArray), quad_index, quad_points); } FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFAnnot_SetRect(FPDF_ANNOTATION annot,
diff --git a/fpdfsdk/fpdf_attachment.cpp b/fpdfsdk/fpdf_attachment.cpp index 05ea1d2..4a8fe27 100644 --- a/fpdfsdk/fpdf_attachment.cpp +++ b/fpdfsdk/fpdf_attachment.cpp
@@ -101,7 +101,7 @@ WideString csName; return FPDFAttachmentFromCPDFObject( - name_tree->LookupValueAndName(index, &csName)); + name_tree->LookupValueAndName(index, &csName).Get()); } FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
diff --git a/fpdfsdk/fpdf_doc.cpp b/fpdfsdk/fpdf_doc.cpp index 18218a1..b53fa97 100644 --- a/fpdfsdk/fpdf_doc.cpp +++ b/fpdfsdk/fpdf_doc.cpp
@@ -415,7 +415,7 @@ } FPDF_EXPORT int FPDF_CALLCONV FPDFLink_CountQuadPoints(FPDF_LINK link_annot) { - const CPDF_Array* pArray = + RetainPtr<const CPDF_Array> pArray = GetQuadPointsArrayFromDictionary(CPDFDictionaryFromFPDFLink(link_annot)); return pArray ? static_cast<int>(pArray->size() / 8) : 0; } @@ -431,12 +431,13 @@ if (!pLinkDict) return false; - const CPDF_Array* pArray = GetQuadPointsArrayFromDictionary(pLinkDict); + RetainPtr<const CPDF_Array> pArray = + GetQuadPointsArrayFromDictionary(pLinkDict); if (!pArray) return false; - return GetQuadPointsAtIndex(pArray, static_cast<size_t>(quad_index), - quad_points); + return GetQuadPointsAtIndex(std::move(pArray), + static_cast<size_t>(quad_index), quad_points); } FPDF_EXPORT FPDF_ACTION FPDF_CALLCONV FPDF_GetPageAAction(FPDF_PAGE page,
diff --git a/fpdfsdk/fpdf_javascript.cpp b/fpdfsdk/fpdf_javascript.cpp index 9207a9e..a6c13ee 100644 --- a/fpdfsdk/fpdf_javascript.cpp +++ b/fpdfsdk/fpdf_javascript.cpp
@@ -5,6 +5,7 @@ #include "public/fpdf_javascript.h" #include <memory> +#include <utility> #include "core/fpdfapi/parser/cpdf_dictionary.h" #include "core/fpdfapi/parser/cpdf_document.h" @@ -39,13 +40,13 @@ return nullptr; WideString name; - CPDF_Dictionary* obj = + RetainPtr<CPDF_Dictionary> obj = ToDictionary(name_tree->LookupValueAndName(index, &name)); if (!obj) return nullptr; // Validate |obj|. Type is optional, but must be valid if present. - CPDF_Action action(pdfium::WrapRetain(obj)); + CPDF_Action action(std::move(obj)); if (action.GetType() != CPDF_Action::Type::kJavaScript) return nullptr;
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp index a727a7b..8a57919 100644 --- a/fpdfsdk/fpdf_view.cpp +++ b/fpdfsdk/fpdf_view.cpp
@@ -1196,7 +1196,7 @@ } wsName = PDF_DecodeText(bsName.raw_span()); } else { - pDestObj.Reset(name_tree->LookupValueAndName(index, &wsName)); + pDestObj = name_tree->LookupValueAndName(index, &wsName); } if (!pDestObj) return nullptr;
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp index a177ed4..99c2007 100644 --- a/xfa/fxfa/cxfa_ffdoc.cpp +++ b/xfa/fxfa/cxfa_ffdoc.cpp
@@ -285,10 +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); + RetainPtr<CPDF_Object> pTempObject = + name_tree->LookupValueAndName(i, &wsTemp); if (wsTemp == wsName) { - pObject.Reset(pTempObject); + pObject = std::move(pTempObject); break; } }