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;
}
}