Return retained arguments from CPDF_ContentMarkItem methods.
Change-Id: I59c4e3fa27ee7606a0382ddc497382f8d1f31bc7
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/98471
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 9ef8796..b129a86 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -223,7 +223,7 @@
return pEntry[0] <= cid && pEntry[1] >= cid;
}
-void LoadMetricsArray(const CPDF_Array* pArray,
+void LoadMetricsArray(RetainPtr<const CPDF_Array> pArray,
std::vector<int>* result,
int nElements) {
int width_status = 0;
@@ -475,10 +475,9 @@
}
m_DefaultWidth = pCIDFontDict->GetIntegerFor("DW", 1000);
RetainPtr<const CPDF_Array> pWidthArray = pCIDFontDict->GetArrayFor("W");
- if (pWidthArray) {
- // TODO(tsepez): pass retained argument.
- LoadMetricsArray(pWidthArray.Get(), &m_WidthList, 1);
- }
+ if (pWidthArray)
+ LoadMetricsArray(std::move(pWidthArray), &m_WidthList, 1);
+
if (!IsEmbedded())
LoadSubstFont();
@@ -498,10 +497,9 @@
CheckFontMetrics();
if (IsVertWriting()) {
RetainPtr<const CPDF_Array> pWidth2Array = pCIDFontDict->GetArrayFor("W2");
- if (pWidth2Array) {
- // TODO(tsepez): pass retained argument.
- LoadMetricsArray(pWidth2Array.Get(), &m_VertMetrics, 3);
- }
+ if (pWidth2Array)
+ LoadMetricsArray(std::move(pWidth2Array), &m_VertMetrics, 3);
+
RetainPtr<const CPDF_Array> pDefaultArray =
pCIDFontDict->GetArrayFor("DW2");
if (pDefaultArray) {
diff --git a/core/fpdfapi/page/cpdf_contentmarkitem.cpp b/core/fpdfapi/page/cpdf_contentmarkitem.cpp
index 08a8be4..3d3ff16 100644
--- a/core/fpdfapi/page/cpdf_contentmarkitem.cpp
+++ b/core/fpdfapi/page/cpdf_contentmarkitem.cpp
@@ -15,22 +15,21 @@
CPDF_ContentMarkItem::~CPDF_ContentMarkItem() = default;
-// TODO(tsepez): return retained reference.
-const CPDF_Dictionary* CPDF_ContentMarkItem::GetParam() const {
+RetainPtr<const CPDF_Dictionary> CPDF_ContentMarkItem::GetParam() const {
switch (m_ParamType) {
case kPropertiesDict:
- return m_pPropertiesHolder->GetDictFor(m_PropertyName).Get();
+ return m_pPropertiesHolder->GetDictFor(m_PropertyName);
case kDirectDict:
- return m_pDirectDict.Get();
+ return m_pDirectDict;
case kNone:
default:
return nullptr;
}
}
-CPDF_Dictionary* CPDF_ContentMarkItem::GetParam() {
- return const_cast<CPDF_Dictionary*>(
- static_cast<const CPDF_ContentMarkItem*>(this)->GetParam());
+RetainPtr<CPDF_Dictionary> CPDF_ContentMarkItem::GetParam() {
+ return pdfium::WrapRetain(const_cast<CPDF_Dictionary*>(
+ static_cast<const CPDF_ContentMarkItem*>(this)->GetParam().Get()));
}
void CPDF_ContentMarkItem::SetDirectDict(RetainPtr<CPDF_Dictionary> pDict) {
diff --git a/core/fpdfapi/page/cpdf_contentmarkitem.h b/core/fpdfapi/page/cpdf_contentmarkitem.h
index e371a72..d00458a 100644
--- a/core/fpdfapi/page/cpdf_contentmarkitem.h
+++ b/core/fpdfapi/page/cpdf_contentmarkitem.h
@@ -21,8 +21,8 @@
const ByteString& GetName() const { return m_MarkName; }
ParamType GetParamType() const { return m_ParamType; }
- const CPDF_Dictionary* GetParam() const;
- CPDF_Dictionary* GetParam();
+ RetainPtr<const CPDF_Dictionary> GetParam() const;
+ RetainPtr<CPDF_Dictionary> GetParam();
const ByteString& GetPropertyName() const { return m_PropertyName; }
void SetDirectDict(RetainPtr<CPDF_Dictionary> pDict);
diff --git a/core/fpdfapi/page/cpdf_contentmarks.cpp b/core/fpdfapi/page/cpdf_contentmarks.cpp
index 9b8a464..5ec6c55 100644
--- a/core/fpdfapi/page/cpdf_contentmarks.cpp
+++ b/core/fpdfapi/page/cpdf_contentmarks.cpp
@@ -118,7 +118,7 @@
int CPDF_ContentMarks::MarkData::GetMarkedContentID() const {
for (const auto& pMark : m_Marks) {
- const CPDF_Dictionary* pDict = pMark->GetParam();
+ RetainPtr<const CPDF_Dictionary> pDict = pMark->GetParam();
if (pDict && pDict->KeyExist("MCID"))
return pDict->GetIntegerFor("MCID");
}
diff --git a/core/fpdfapi/page/cpdf_occontext.cpp b/core/fpdfapi/page/cpdf_occontext.cpp
index e4c2949..cc652df 100644
--- a/core/fpdfapi/page/cpdf_occontext.cpp
+++ b/core/fpdfapi/page/cpdf_occontext.cpp
@@ -177,7 +177,7 @@
const CPDF_ContentMarkItem* item = pMarks->GetItem(i);
if (item->GetName() == "OC" &&
item->GetParamType() == CPDF_ContentMarkItem::kPropertiesDict &&
- !CheckOCGVisible(item->GetParam())) {
+ !CheckOCGVisible(item->GetParam().Get())) {
return false;
}
}
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index b6ed0df..64f2a20 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -818,7 +818,7 @@
WideString actText;
bool bExist = false;
- const CPDF_Dictionary* pDict = nullptr;
+ RetainPtr<const CPDF_Dictionary> pDict;
for (size_t i = 0; i < nContentMarks; ++i) {
const CPDF_ContentMarkItem* item = pMarks->GetItem(i);
pDict = item->GetParam();
@@ -876,7 +876,7 @@
WideString actText;
for (size_t n = 0; n < nContentMarks; ++n) {
const CPDF_ContentMarkItem* item = pMarks->GetItem(n);
- const CPDF_Dictionary* pDict = item->GetParam();
+ RetainPtr<const CPDF_Dictionary> pDict = item->GetParam();
if (pDict)
actText = pDict->GetUnicodeTextFor("ActualText");
}
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index 0611a57..7b034f4 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -104,14 +104,14 @@
}
}
-CPDF_Dictionary* GetMarkParamDict(FPDF_PAGEOBJECTMARK mark) {
+RetainPtr<CPDF_Dictionary> GetMarkParamDict(FPDF_PAGEOBJECTMARK mark) {
CPDF_ContentMarkItem* pMarkItem =
CPDFContentMarkItemFromFPDFPageObjectMark(mark);
return pMarkItem ? pMarkItem->GetParam() : nullptr;
}
-CPDF_Dictionary* GetOrCreateMarkParamsDict(FPDF_DOCUMENT document,
- FPDF_PAGEOBJECTMARK mark) {
+RetainPtr<CPDF_Dictionary> GetOrCreateMarkParamsDict(FPDF_DOCUMENT document,
+ FPDF_PAGEOBJECTMARK mark) {
CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
if (!pDoc)
return nullptr;
@@ -121,15 +121,11 @@
if (!pMarkItem)
return nullptr;
- CPDF_Dictionary* pParams = pMarkItem->GetParam();
-
- // If the Params dict does not exist, create a new one.
+ RetainPtr<CPDF_Dictionary> pParams = pMarkItem->GetParam();
if (!pParams) {
- auto new_dict = pDoc->New<CPDF_Dictionary>();
- pParams = new_dict.Get();
- pMarkItem->SetDirectDict(std::move(new_dict));
+ pParams = pDoc->New<CPDF_Dictionary>();
+ pMarkItem->SetDirectDict(pParams);
}
-
return pParams;
}
@@ -366,7 +362,7 @@
if (!pMarkItem)
return -1;
- const CPDF_Dictionary* pParams = pMarkItem->GetParam();
+ RetainPtr<const CPDF_Dictionary> pParams = pMarkItem->GetParam();
return pParams ? fxcrt::CollectionSize<int>(*pParams) : 0;
}
@@ -379,7 +375,7 @@
if (!out_buflen)
return false;
- const CPDF_Dictionary* pParams = GetMarkParamDict(mark);
+ RetainPtr<const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
if (!pParams)
return false;
@@ -399,7 +395,7 @@
FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
FPDFPageObjMark_GetParamValueType(FPDF_PAGEOBJECTMARK mark,
FPDF_BYTESTRING key) {
- const CPDF_Dictionary* pParams = GetMarkParamDict(mark);
+ RetainPtr<const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
if (!pParams)
return FPDF_OBJECT_UNKNOWN;
@@ -414,7 +410,7 @@
if (!out_value)
return false;
- const CPDF_Dictionary* pParams = GetMarkParamDict(mark);
+ RetainPtr<const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
if (!pParams)
return false;
@@ -435,7 +431,7 @@
if (!out_buflen)
return false;
- const CPDF_Dictionary* pParams = GetMarkParamDict(mark);
+ RetainPtr<const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
if (!pParams)
return false;
@@ -457,7 +453,7 @@
if (!out_buflen)
return false;
- const CPDF_Dictionary* pParams = GetMarkParamDict(mark);
+ RetainPtr<const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
if (!pParams)
return false;
@@ -516,7 +512,8 @@
if (!pPageObj || !PageObjectContainsMark(pPageObj, mark))
return false;
- CPDF_Dictionary* pParams = GetOrCreateMarkParamsDict(document, mark);
+ RetainPtr<CPDF_Dictionary> pParams =
+ GetOrCreateMarkParamsDict(document, mark);
if (!pParams)
return false;
@@ -535,7 +532,8 @@
if (!pPageObj || !PageObjectContainsMark(pPageObj, mark))
return false;
- CPDF_Dictionary* pParams = GetOrCreateMarkParamsDict(document, mark);
+ RetainPtr<CPDF_Dictionary> pParams =
+ GetOrCreateMarkParamsDict(document, mark);
if (!pParams)
return false;
@@ -555,7 +553,8 @@
if (!pPageObj || !PageObjectContainsMark(pPageObj, mark))
return false;
- CPDF_Dictionary* pParams = GetOrCreateMarkParamsDict(document, mark);
+ RetainPtr<CPDF_Dictionary> pParams =
+ GetOrCreateMarkParamsDict(document, mark);
if (!pParams)
return false;
@@ -576,7 +575,7 @@
if (!pPageObj)
return false;
- CPDF_Dictionary* pParams = GetMarkParamDict(mark);
+ RetainPtr<CPDF_Dictionary> pParams = GetMarkParamDict(mark);
if (!pParams)
return false;