Pass/return retained args from CPDF_NumberTree. Change-Id: Ice3c121f2fa0e56995e6f08209de429c98f4ff40 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/98593 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfdoc/cpdf_numbertree.cpp b/core/fpdfdoc/cpdf_numbertree.cpp index 71cb3ef..d597a7d 100644 --- a/core/fpdfdoc/cpdf_numbertree.cpp +++ b/core/fpdfdoc/cpdf_numbertree.cpp
@@ -6,13 +6,15 @@ #include "core/fpdfdoc/cpdf_numbertree.h" +#include <utility> + #include "core/fpdfapi/parser/cpdf_array.h" #include "core/fpdfapi/parser/cpdf_dictionary.h" namespace { -// TODO(tsepez): return retained objects. -const CPDF_Object* SearchNumberNode(const CPDF_Dictionary* pNode, int num) { +RetainPtr<const CPDF_Object> SearchNumberNode(const CPDF_Dictionary* pNode, + int num) { RetainPtr<const CPDF_Array> pLimits = pNode->GetArrayFor("Limits"); if (pLimits && (num < pLimits->GetIntegerAt(0) || num > pLimits->GetIntegerAt(1))) { @@ -23,7 +25,7 @@ for (size_t i = 0; i < pNumbers->size() / 2; i++) { int index = pNumbers->GetIntegerAt(i * 2); if (num == index) - return pNumbers->GetDirectObjectAt(i * 2 + 1).Get(); + return pNumbers->GetDirectObjectAt(i * 2 + 1); if (index > num) break; } @@ -39,7 +41,7 @@ if (!pKid) continue; - const CPDF_Object* pFound = SearchNumberNode(pKid.Get(), num); + RetainPtr<const CPDF_Object> pFound = SearchNumberNode(pKid.Get(), num); if (pFound) return pFound; } @@ -48,11 +50,11 @@ } // namespace -CPDF_NumberTree::CPDF_NumberTree(const CPDF_Dictionary* pRoot) - : m_pRoot(pRoot) {} +CPDF_NumberTree::CPDF_NumberTree(RetainPtr<const CPDF_Dictionary> pRoot) + : m_pRoot(std::move(pRoot)) {} CPDF_NumberTree::~CPDF_NumberTree() = default; -const CPDF_Object* CPDF_NumberTree::LookupValue(int num) const { +RetainPtr<const CPDF_Object> CPDF_NumberTree::LookupValue(int num) const { return SearchNumberNode(m_pRoot.Get(), num); }
diff --git a/core/fpdfdoc/cpdf_numbertree.h b/core/fpdfdoc/cpdf_numbertree.h index 2a3fa6e..cefd58e 100644 --- a/core/fpdfdoc/cpdf_numbertree.h +++ b/core/fpdfdoc/cpdf_numbertree.h
@@ -14,10 +14,10 @@ class CPDF_NumberTree { public: - explicit CPDF_NumberTree(const CPDF_Dictionary* pRoot); + explicit CPDF_NumberTree(RetainPtr<const CPDF_Dictionary> pRoot); ~CPDF_NumberTree(); - const CPDF_Object* LookupValue(int num) const; + RetainPtr<const CPDF_Object> LookupValue(int num) const; protected: RetainPtr<const CPDF_Dictionary> const m_pRoot;
diff --git a/core/fpdfdoc/cpdf_pagelabel.cpp b/core/fpdfdoc/cpdf_pagelabel.cpp index e67aee6..e9591cb 100644 --- a/core/fpdfdoc/cpdf_pagelabel.cpp +++ b/core/fpdfdoc/cpdf_pagelabel.cpp
@@ -6,6 +6,8 @@ #include "core/fpdfdoc/cpdf_pagelabel.h" +#include <utility> + #include "core/fpdfapi/parser/cpdf_dictionary.h" #include "core/fpdfapi/parser/cpdf_document.h" #include "core/fpdfapi/parser/fpdf_parser_decode.h" @@ -94,13 +96,11 @@ if (!pLabels) return absl::nullopt; - // TODO(tsepez): pass retained object. - CPDF_NumberTree numberTree(pLabels.Get()); + CPDF_NumberTree numberTree(std::move(pLabels)); RetainPtr<const CPDF_Object> pValue; int n = nPage; while (n >= 0) { - // TODO(tsepez): make LookupValue() return retained object. - pValue = pdfium::WrapRetain(numberTree.LookupValue(n)); + pValue = numberTree.LookupValue(n); if (pValue) break; n--;
diff --git a/core/fpdfdoc/cpdf_structtree.cpp b/core/fpdfdoc/cpdf_structtree.cpp index 7a67ea1..acfa405 100644 --- a/core/fpdfdoc/cpdf_structtree.cpp +++ b/core/fpdfdoc/cpdf_structtree.cpp
@@ -64,13 +64,13 @@ m_Kids.clear(); m_Kids.resize(dwKids); + RetainPtr<const CPDF_Dictionary> pParentTree = m_pTreeRoot->GetDictFor("ParentTree"); if (!pParentTree) return; - // TODO(tsepez): pass retained object. - CPDF_NumberTree parent_tree(pParentTree.Get()); + CPDF_NumberTree parent_tree(std::move(pParentTree)); int parents_id = pPageDict->GetIntegerFor("StructParents", -1); if (parents_id < 0) return;