Simplify loop in core/fpdfapi/page/cpdf_page.cpp Avoid inserting into a set where possible at the cost of a lookup in an empty set (which should be very cheap). Change-Id: I9c384b488ebf3bd85592c6398f8198a4991669ab Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/94570 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 4f11c91..5aad0f1 100644 --- a/core/fpdfapi/page/cpdf_page.cpp +++ b/core/fpdfapi/page/cpdf_page.cpp
@@ -75,16 +75,15 @@ } CPDF_Object* CPDF_Page::GetPageAttr(const ByteString& name) const { - CPDF_Dictionary* pPageDict = GetDict(); std::set<CPDF_Dictionary*> visited; - while (true) { - visited.insert(pPageDict); - if (CPDF_Object* pObj = pPageDict->GetDirectObjectFor(name)) + CPDF_Dictionary* pPageDict = GetDict(); + while (pPageDict && !pdfium::Contains(visited, pPageDict)) { + CPDF_Object* pObj = pPageDict->GetDirectObjectFor(name); + if (pObj) return pObj; + visited.insert(pPageDict); pPageDict = pPageDict->GetDictFor(pdfium::page_object::kParent); - if (!pPageDict || pdfium::Contains(visited, pPageDict)) - break; } return nullptr; }