Encapsulate CPDF_PageObject::m_ContentMarks
Bug: pdfium:1680
Change-Id: Ib284419c5a630ed2ce6b09bcbf06f6b5ca86a766
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/80050
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index 1dfef98..9ce49f2 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -228,9 +228,8 @@
std::ostringstream* buf,
const CPDF_PageObject* pPageObj,
const CPDF_ContentMarks* pPrev) {
- const CPDF_ContentMarks* pNext = &pPageObj->m_ContentMarks;
-
- size_t first_different = pPrev->FindFirstDifference(pNext);
+ const CPDF_ContentMarks* pNext = pPageObj->GetContentMarks();
+ const size_t first_different = pPrev->FindFirstDifference(pNext);
// Close all marks that are in prev but not in next.
// Technically we should iterate backwards to close from the top to the
diff --git a/core/fpdfapi/page/cpdf_occontext.cpp b/core/fpdfapi/page/cpdf_occontext.cpp
index 62aad99..56592cb 100644
--- a/core/fpdfapi/page/cpdf_occontext.cpp
+++ b/core/fpdfapi/page/cpdf_occontext.cpp
@@ -183,8 +183,9 @@
}
bool CPDF_OCContext::CheckObjectVisible(const CPDF_PageObject* pObj) const {
- for (size_t i = 0; i < pObj->m_ContentMarks.CountItems(); ++i) {
- const CPDF_ContentMarkItem* item = pObj->m_ContentMarks.GetItem(i);
+ const CPDF_ContentMarks* pMarks = pObj->GetContentMarks();
+ for (size_t i = 0; i < pMarks->CountItems(); ++i) {
+ const CPDF_ContentMarkItem* item = pMarks->GetItem(i);
if (item->GetName() == "OC" &&
item->GetParamType() == CPDF_ContentMarkItem::kPropertiesDict &&
!CheckOCGVisible(item->GetParam())) {
diff --git a/core/fpdfapi/page/cpdf_pageobject.h b/core/fpdfapi/page/cpdf_pageobject.h
index f840214..a8ce3e9 100644
--- a/core/fpdfapi/page/cpdf_pageobject.h
+++ b/core/fpdfapi/page/cpdf_pageobject.h
@@ -63,6 +63,12 @@
FX_RECT GetBBox() const;
FX_RECT GetTransformedBBox(const CFX_Matrix& matrix) const;
+ CPDF_ContentMarks* GetContentMarks() { return &m_ContentMarks; }
+ const CPDF_ContentMarks* GetContentMarks() const { return &m_ContentMarks; }
+ void SetContentMarks(const CPDF_ContentMarks& marks) {
+ m_ContentMarks = marks;
+ }
+
// Get what content stream the object was parsed from in its page. This number
// is the index of the content stream in the "Contents" array, or 0 if there
// is a single content stream. If the object is newly created,
@@ -75,7 +81,6 @@
m_ContentStream = new_content_stream;
}
- CPDF_ContentMarks m_ContentMarks;
protected:
void CopyData(const CPDF_PageObject* pSrcObject);
@@ -83,6 +88,7 @@
CFX_FloatRect m_Rect;
private:
+ CPDF_ContentMarks m_ContentMarks;
bool m_bDirty = false;
int32_t m_ContentStream;
};
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 2039a57..9435f40 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -402,7 +402,7 @@
bool bGraph) {
pObj->m_GeneralState = m_pCurStates->m_GeneralState;
pObj->m_ClipPath = m_pCurStates->m_ClipPath;
- pObj->m_ContentMarks = *m_ContentMarksStack.top();
+ pObj->SetContentMarks(*m_ContentMarksStack.top());
if (bColor) {
pObj->m_ColorState = m_pCurStates->m_ColorState;
}
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index f0f7034..f4bf8e2 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -832,7 +832,8 @@
CPDF_TextPage::MarkedContentState CPDF_TextPage::PreMarkedContent(
const CPDF_TextObject* pTextObj) {
- size_t nContentMarks = pTextObj->m_ContentMarks.CountItems();
+ const CPDF_ContentMarks* pMarks = pTextObj->GetContentMarks();
+ const size_t nContentMarks = pMarks->CountItems();
if (nContentMarks == 0)
return MarkedContentState::kPass;
@@ -840,7 +841,7 @@
bool bExist = false;
const CPDF_Dictionary* pDict = nullptr;
for (size_t i = 0; i < nContentMarks; ++i) {
- const CPDF_ContentMarkItem* item = pTextObj->m_ContentMarks.GetItem(i);
+ const CPDF_ContentMarkItem* item = pMarks->GetItem(i);
pDict = item->GetParam();
if (!pDict)
continue;
@@ -854,9 +855,9 @@
return MarkedContentState::kPass;
if (m_pPrevTextObj) {
- const CPDF_ContentMarks& marks = m_pPrevTextObj->m_ContentMarks;
- if (marks.CountItems() == nContentMarks &&
- marks.GetItem(nContentMarks - 1)->GetParam() == pDict) {
+ const CPDF_ContentMarks* pPrevMarks = m_pPrevTextObj->GetContentMarks();
+ if (pPrevMarks->CountItems() == nContentMarks &&
+ pPrevMarks->GetItem(nContentMarks - 1)->GetParam() == pDict) {
return MarkedContentState::kDone;
}
}
@@ -891,13 +892,11 @@
void CPDF_TextPage::ProcessMarkedContent(const TransformedTextObject& obj) {
const CPDF_TextObject* pTextObj = obj.m_pTextObj.Get();
- size_t nContentMarks = pTextObj->m_ContentMarks.CountItems();
- if (nContentMarks == 0)
- return;
-
+ const CPDF_ContentMarks* pMarks = pTextObj->GetContentMarks();
+ const size_t nContentMarks = pMarks->CountItems();
WideString actText;
for (size_t n = 0; n < nContentMarks; ++n) {
- const CPDF_ContentMarkItem* item = pTextObj->m_ContentMarks.GetItem(n);
+ const CPDF_ContentMarkItem* item = pMarks->GetItem(n);
const CPDF_Dictionary* pDict = item->GetParam();
if (pDict)
actText = pDict->GetUnicodeTextFor("ActualText");
diff --git a/fpdfsdk/fpdf_editimg.cpp b/fpdfsdk/fpdf_editimg.cpp
index f98f223..9f86f30 100644
--- a/fpdfsdk/fpdf_editimg.cpp
+++ b/fpdfsdk/fpdf_editimg.cpp
@@ -364,7 +364,8 @@
if (!pImg)
return false;
- metadata->marked_content_id = pImgObj->m_ContentMarks.GetMarkedContentID();
+ metadata->marked_content_id =
+ pImgObj->GetContentMarks()->GetMarkedContentID();
const int nPixelWidth = pImg->GetPixelWidth();
const int nPixelHeight = pImg->GetPixelHeight();
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index 6e71924..5c5774e 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -134,7 +134,7 @@
FPDF_PAGEOBJECTMARK mark) {
const CPDF_ContentMarkItem* pMarkItem =
CPDFContentMarkItemFromFPDFPageObjectMark(mark);
- return pMarkItem && pPageObj->m_ContentMarks.ContainsItem(pMarkItem);
+ return pMarkItem && pPageObj->GetContentMarks()->ContainsItem(pMarkItem);
}
CPDF_FormObject* CPDFFormObjectFromFPDFPageObject(FPDF_PAGEOBJECT page_object) {
@@ -294,7 +294,7 @@
if (!pPageObj)
return -1;
- return pPageObj->m_ContentMarks.CountItems();
+ return pPageObj->GetContentMarks()->CountItems();
}
FPDF_EXPORT FPDF_PAGEOBJECTMARK FPDF_CALLCONV
@@ -303,11 +303,11 @@
if (!pPageObj)
return nullptr;
- auto& mark = pPageObj->m_ContentMarks;
- if (index >= mark.CountItems())
+ CPDF_ContentMarks* pMarks = pPageObj->GetContentMarks();
+ if (index >= pMarks->CountItems())
return nullptr;
- return FPDFPageObjectMarkFromCPDFContentMarkItem(mark.GetItem(index));
+ return FPDFPageObjectMarkFromCPDFContentMarkItem(pMarks->GetItem(index));
}
FPDF_EXPORT FPDF_PAGEOBJECTMARK FPDF_CALLCONV
@@ -316,11 +316,12 @@
if (!pPageObj)
return nullptr;
- auto& mark = pPageObj->m_ContentMarks;
- mark.AddMark(name);
- unsigned long index = mark.CountItems() - 1;
+ CPDF_ContentMarks* pMarks = pPageObj->GetContentMarks();
+ pMarks->AddMark(name);
pPageObj->SetDirty(true);
- return FPDFPageObjectMarkFromCPDFContentMarkItem(mark.GetItem(index));
+
+ const unsigned long index = pMarks->CountItems() - 1;
+ return FPDFPageObjectMarkFromCPDFContentMarkItem(pMarks->GetItem(index));
}
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
@@ -331,11 +332,11 @@
if (!pPageObj || !pMarkItem)
return false;
- bool result = pPageObj->m_ContentMarks.RemoveMark(pMarkItem);
- if (result)
- pPageObj->SetDirty(true);
+ if (!pPageObj->GetContentMarks()->RemoveMark(pMarkItem))
+ return false;
- return result;
+ pPageObj->SetDirty(true);
+ return true;
}
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV