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;