Add mutable form of CPDF_Page::GetPageAttr()
Then force const form to return const objects only.
Change-Id: I677141e66753a47c268fd0704ac61fc5627ad904
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/94610
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_page.cpp b/core/fpdfapi/page/cpdf_page.cpp
index 5aad0f1..79c411e 100644
--- a/core/fpdfapi/page/cpdf_page.cpp
+++ b/core/fpdfapi/page/cpdf_page.cpp
@@ -28,7 +28,8 @@
// Cannot initialize |m_pResources| and |m_pPageResources| via the
// CPDF_PageObjectHolder ctor because GetPageAttr() requires
// CPDF_PageObjectHolder to finish initializing first.
- CPDF_Object* pPageAttr = GetPageAttr(pdfium::page_object::kResources);
+ RetainPtr<CPDF_Object> pPageAttr =
+ GetMutablePageAttr(pdfium::page_object::kResources);
m_pResources.Reset(pPageAttr ? pPageAttr->GetDict() : nullptr);
m_pPageResources = m_pResources;
@@ -74,7 +75,11 @@
ContinueParse(nullptr);
}
-CPDF_Object* CPDF_Page::GetPageAttr(const ByteString& name) const {
+RetainPtr<CPDF_Object> CPDF_Page::GetMutablePageAttr(const ByteString& name) {
+ return pdfium::WrapRetain(const_cast<CPDF_Object*>(GetPageAttr(name)));
+}
+
+const CPDF_Object* CPDF_Page::GetPageAttr(const ByteString& name) const {
std::set<CPDF_Dictionary*> visited;
CPDF_Dictionary* pPageDict = GetDict();
while (pPageDict && !pdfium::Contains(visited, pPageDict)) {
@@ -90,7 +95,7 @@
CFX_FloatRect CPDF_Page::GetBox(const ByteString& name) const {
CFX_FloatRect box;
- CPDF_Array* pBox = ToArray(GetPageAttr(name));
+ const CPDF_Array* pBox = ToArray(GetPageAttr(name));
if (pBox) {
box = pBox->GetRect();
box.Normalize();
@@ -172,7 +177,7 @@
}
int CPDF_Page::GetPageRotation() const {
- CPDF_Object* pRotate = GetPageAttr(pdfium::page_object::kRotate);
+ const CPDF_Object* pRotate = GetPageAttr(pdfium::page_object::kRotate);
int rotate = pRotate ? (pRotate->GetInteger() / 90) % 4 : 0;
return (rotate < 0) ? (rotate + 4) : rotate;
}
diff --git a/core/fpdfapi/page/cpdf_page.h b/core/fpdfapi/page/cpdf_page.h
index d2ff1ac..546b106 100644
--- a/core/fpdfapi/page/cpdf_page.h
+++ b/core/fpdfapi/page/cpdf_page.h
@@ -101,7 +101,8 @@
CPDF_Page(CPDF_Document* pDocument, CPDF_Dictionary* pPageDict);
~CPDF_Page() override;
- CPDF_Object* GetPageAttr(const ByteString& name) const;
+ RetainPtr<CPDF_Object> GetMutablePageAttr(const ByteString& name);
+ const CPDF_Object* GetPageAttr(const ByteString& name) const;
CFX_FloatRect GetBox(const ByteString& name) const;
CFX_SizeF m_PageSize;