Return retained references from CPDF_PageObjectHolder methods.
Propagate these into a few called methods.
-- fix some local names while at it.
Change-Id: Ib03a04672baf7a63cfdc8b33370c16f8a5cc7200
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/99010
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index 934ade1..eacad41 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -39,7 +39,8 @@
const CPDF_Dictionary* TestGetResource(CPDF_PageContentGenerator* pGen,
const ByteString& type,
const ByteString& name) {
- const CPDF_Dictionary* pResources = pGen->m_pObjHolder->GetResources();
+ RetainPtr<const CPDF_Dictionary> pResources =
+ pGen->m_pObjHolder->GetResources();
return pResources->GetDictFor(type)->GetDictFor(name).Get();
}
diff --git a/core/fpdfapi/page/cpdf_page.cpp b/core/fpdfapi/page/cpdf_page.cpp
index 6edf44c..053413b 100644
--- a/core/fpdfapi/page/cpdf_page.cpp
+++ b/core/fpdfapi/page/cpdf_page.cpp
@@ -80,8 +80,8 @@
RetainPtr<const CPDF_Object> CPDF_Page::GetPageAttr(
const ByteString& name) const {
- std::set<const CPDF_Dictionary*> visited;
- const CPDF_Dictionary* pPageDict = GetDict();
+ std::set<RetainPtr<const CPDF_Dictionary>> visited;
+ RetainPtr<const CPDF_Dictionary> pPageDict = GetDict();
while (pPageDict && !pdfium::Contains(visited, pPageDict)) {
RetainPtr<const CPDF_Object> pObj = pPageDict->GetDirectObjectFor(name);
if (pObj)
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.h b/core/fpdfapi/page/cpdf_pageobjectholder.h
index 231e150..6334f33 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.h
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.h
@@ -69,15 +69,15 @@
ParseState GetParseState() const { return m_ParseState; }
CPDF_Document* GetDocument() const { return m_pDocument.Get(); }
- const CPDF_Dictionary* GetDict() const { return m_pDict.Get(); }
+ RetainPtr<const CPDF_Dictionary> GetDict() const { return m_pDict; }
RetainPtr<CPDF_Dictionary> GetMutableDict() { return m_pDict; }
- const CPDF_Dictionary* GetResources() const { return m_pResources.Get(); }
+ RetainPtr<const CPDF_Dictionary> GetResources() const { return m_pResources; }
RetainPtr<CPDF_Dictionary> GetMutableResources() { return m_pResources; }
void SetResources(RetainPtr<CPDF_Dictionary> pDict) {
m_pResources = std::move(pDict);
}
- const CPDF_Dictionary* GetPageResources() const {
- return m_pPageResources.Get();
+ RetainPtr<const CPDF_Dictionary> GetPageResources() const {
+ return m_pPageResources;
}
RetainPtr<CPDF_Dictionary> GetMutablePageResources() {
return m_pPageResources;
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 26c2d6a..c5fda1b 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -168,7 +168,7 @@
} else {
pDocument = m_pImageObject->GetImage()->GetDocument();
}
- const CPDF_Dictionary* pPageResources =
+ RetainPtr<const CPDF_Dictionary> pPageResources =
pPage ? pPage->GetPageResources() : nullptr;
RetainPtr<const CPDF_Dictionary> pStreamDict =
m_pImageObject->GetImage()->GetStream()->GetDict();
diff --git a/core/fpdfapi/render/cpdf_pagerendercache.cpp b/core/fpdfapi/render/cpdf_pagerendercache.cpp
index 687f51a..f6b9a57 100644
--- a/core/fpdfapi/render/cpdf_pagerendercache.cpp
+++ b/core/fpdfapi/render/cpdf_pagerendercache.cpp
@@ -92,7 +92,7 @@
m_pPage->GetDocument(), std::move(pImage));
}
CPDF_DIB::LoadState ret = m_pCurImageCacheEntry->StartGetCachedBitmap(
- m_pPage->GetPageResources(), pRenderStatus, bStdCS);
+ m_pPage->GetPageResources().Get(), pRenderStatus, bStdCS);
if (ret == CPDF_DIB::LoadState::kContinue)
return true;
diff --git a/core/fpdfapi/render/cpdf_rendertiling.cpp b/core/fpdfapi/render/cpdf_rendertiling.cpp
index 8d89d61..b864eca 100644
--- a/core/fpdfapi/render/cpdf_rendertiling.cpp
+++ b/core/fpdfapi/render/cpdf_rendertiling.cpp
@@ -123,9 +123,8 @@
if (!pPattern->colored())
pStates = CPDF_RenderStatus::CloneObjStates(pPageObj, bStroke);
- const CPDF_Dictionary* pFormDict = pPatternForm->GetDict();
RetainPtr<const CPDF_Dictionary> pFormResource =
- pFormDict->GetDictFor("Resources");
+ pPatternForm->GetDict()->GetDictFor("Resources");
for (int col = min_col; col <= max_col; col++) {
for (int row = min_row; row <= max_row; row++) {
CFX_PointF original = mtPattern2Device.Transform(
diff --git a/core/fpdfdoc/cpdf_structtree.cpp b/core/fpdfdoc/cpdf_structtree.cpp
index 10298f9..6d12327 100644
--- a/core/fpdfdoc/cpdf_structtree.cpp
+++ b/core/fpdfdoc/cpdf_structtree.cpp
@@ -30,12 +30,12 @@
// static
std::unique_ptr<CPDF_StructTree> CPDF_StructTree::LoadPage(
const CPDF_Document* pDoc,
- const CPDF_Dictionary* pPageDict) {
+ RetainPtr<const CPDF_Dictionary> pPageDict) {
if (!IsTagged(pDoc))
return nullptr;
auto pTree = std::make_unique<CPDF_StructTree>(pDoc);
- pTree->LoadPageTree(pPageDict);
+ pTree->LoadPageTree(std::move(pPageDict));
return pTree;
}
@@ -54,8 +54,8 @@
return type;
}
-void CPDF_StructTree::LoadPageTree(const CPDF_Dictionary* pPageDict) {
- m_pPage.Reset(pPageDict);
+void CPDF_StructTree::LoadPageTree(RetainPtr<const CPDF_Dictionary> pPageDict) {
+ m_pPage = std::move(pPageDict);
if (!m_pTreeRoot)
return;
@@ -80,7 +80,7 @@
return;
CPDF_NumberTree parent_tree(std::move(pParentTree));
- int parents_id = pPageDict->GetIntegerFor("StructParents", -1);
+ int parents_id = m_pPage->GetIntegerFor("StructParents", -1);
if (parents_id < 0)
return;
diff --git a/core/fpdfdoc/cpdf_structtree.h b/core/fpdfdoc/cpdf_structtree.h
index aebbc99..c15ea41 100644
--- a/core/fpdfdoc/cpdf_structtree.h
+++ b/core/fpdfdoc/cpdf_structtree.h
@@ -23,7 +23,7 @@
public:
static std::unique_ptr<CPDF_StructTree> LoadPage(
const CPDF_Document* pDoc,
- const CPDF_Dictionary* pPageDict);
+ RetainPtr<const CPDF_Dictionary> pPageDict);
explicit CPDF_StructTree(const CPDF_Document* pDoc);
~CPDF_StructTree();
@@ -38,7 +38,7 @@
RetainPtr<CPDF_StructElement>,
std::less<>>;
- void LoadPageTree(const CPDF_Dictionary* pPageDict);
+ void LoadPageTree(RetainPtr<const CPDF_Dictionary> pPageDict);
RetainPtr<CPDF_StructElement> AddPageNode(
RetainPtr<const CPDF_Dictionary> pDict,
StructElementMap* map,
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index 79b2fe3..66ed4cf 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -609,7 +609,6 @@
}
int CPDFSDK_PageView::GetPageIndexForStaticPDF() const {
- const CPDF_Dictionary* pDict = GetPDFPage()->GetDict();
CPDF_Document* pDoc = m_pFormFillEnv->GetPDFDocument();
- return pDoc->GetPageIndex(pDict->GetObjNum());
+ return pDoc->GetPageIndex(GetPDFPage()->GetDict()->GetObjNum());
}
diff --git a/fpdfsdk/fpdf_doc.cpp b/fpdfsdk/fpdf_doc.cpp
index d5c4abf..c66da2b 100644
--- a/fpdfsdk/fpdf_doc.cpp
+++ b/fpdfsdk/fpdf_doc.cpp
@@ -445,9 +445,7 @@
if (!pdf_page)
return nullptr;
- const CPDF_Dictionary* page_dict = pdf_page->GetDict();
- CPDF_AAction aa(page_dict->GetDictFor(pdfium::form_fields::kAA));
-
+ CPDF_AAction aa(pdf_page->GetDict()->GetDictFor(pdfium::form_fields::kAA));
CPDF_AAction::AActionType type;
if (aa_type == FPDFPAGE_AACTION_OPEN)
type = CPDF_AAction::kOpenPage;
diff --git a/fpdfsdk/fpdf_editimg.cpp b/fpdfsdk/fpdf_editimg.cpp
index bde58fc..e64651e 100644
--- a/fpdfsdk/fpdf_editimg.cpp
+++ b/fpdfsdk/fpdf_editimg.cpp
@@ -391,7 +391,7 @@
RetainPtr<CPDF_DIB> pSource = pImg->CreateNewDIB();
CPDF_DIB::LoadState ret = pSource->StartLoadDIBBase(
- false, nullptr, pPage->GetPageResources(), false,
+ false, nullptr, pPage->GetPageResources().Get(), false,
CPDF_ColorSpace::Family::kUnknown, false);
if (ret == CPDF_DIB::LoadState::kFail)
return true;
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index 2d6ff76..fbc059b 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -67,7 +67,7 @@
if (!pPage)
return false;
- const CPDF_Dictionary* pFormDict = pPage->GetDict();
+ RetainPtr<const CPDF_Dictionary> pFormDict = pPage->GetDict();
if (!pFormDict->KeyExist(pdfium::page_object::kType))
return false;
diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp
index 2694f75..78924cf 100644
--- a/fpdfsdk/fpdf_formfill.cpp
+++ b/fpdfsdk/fpdf_formfill.cpp
@@ -800,8 +800,7 @@
if (!pFormFillEnv->GetPageView(pPage))
return;
- const CPDF_Dictionary* pPageDict = pPDFPage->GetDict();
- CPDF_AAction aa(pPageDict->GetDictFor(pdfium::form_fields::kAA));
+ CPDF_AAction aa(pPDFPage->GetDict()->GetDictFor(pdfium::form_fields::kAA));
CPDF_AAction::AActionType type = aaType == FPDFPAGE_AACTION_OPEN
? CPDF_AAction::kOpenPage
: CPDF_AAction::kClosePage;
diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp
index 670bc3a..a8df848 100644
--- a/fpdfsdk/fpdf_ppo.cpp
+++ b/fpdfsdk/fpdf_ppo.cpp
@@ -601,8 +601,7 @@
RetainPtr<CPDF_Stream> CPDF_NPageToOneExporter::MakeXObjectFromPageRaw(
RetainPtr<CPDF_Page> pSrcPage) {
- // TODO(tsepez): return retained object from CPDF_Page::GetDict()'
- RetainPtr<const CPDF_Dictionary> pSrcPageDict(pSrcPage->GetDict());
+ RetainPtr<const CPDF_Dictionary> pSrcPageDict = pSrcPage->GetDict();
RetainPtr<const CPDF_Object> pSrcContentObj =
pSrcPageDict->GetDirectObjectFor(pdfium::page_object::kContents);
diff --git a/fpdfsdk/fpdf_thumbnail.cpp b/fpdfsdk/fpdf_thumbnail.cpp
index 71c5c26..74c7831 100644
--- a/fpdfsdk/fpdf_thumbnail.cpp
+++ b/fpdfsdk/fpdf_thumbnail.cpp
@@ -18,11 +18,11 @@
namespace {
RetainPtr<const CPDF_Stream> CPDFStreamForThumbnailFromPage(FPDF_PAGE page) {
- const CPDF_Page* p_page = CPDFPageFromFPDFPage(page);
- if (!p_page)
+ const CPDF_Page* pdf_page = CPDFPageFromFPDFPage(page);
+ if (!pdf_page)
return nullptr;
- const CPDF_Dictionary* page_dict = p_page->GetDict();
+ RetainPtr<const CPDF_Dictionary> page_dict = pdf_page->GetDict();
if (!page_dict->KeyExist("Type"))
return nullptr;
@@ -62,18 +62,17 @@
if (!thumb_stream)
return nullptr;
- const CPDF_Page* p_page = CPDFPageFromFPDFPage(page);
-
- auto p_source = pdfium::MakeRetain<CPDF_DIB>(p_page->GetDocument(),
- std::move(thumb_stream));
- const CPDF_DIB::LoadState start_status = p_source->StartLoadDIBBase(
- false, nullptr, p_page->GetPageResources(), false,
+ const CPDF_Page* pdf_page = CPDFPageFromFPDFPage(page);
+ auto dib_source = pdfium::MakeRetain<CPDF_DIB>(pdf_page->GetDocument(),
+ std::move(thumb_stream));
+ const CPDF_DIB::LoadState start_status = dib_source->StartLoadDIBBase(
+ false, nullptr, pdf_page->GetPageResources().Get(), false,
CPDF_ColorSpace::Family::kUnknown, false);
if (start_status == CPDF_DIB::LoadState::kFail)
return nullptr;
auto thumb_bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
- if (!thumb_bitmap->Copy(p_source))
+ if (!thumb_bitmap->Copy(dib_source))
return nullptr;
return FPDFBitmapFromCFXDIBitmap(thumb_bitmap.Leak());