From 1d1ee8300f2cf1a191efb9f3495485c71bd75858 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 8 Mar 2016 11:51:27 -0800 Subject: Merge to M50: Fix O(n^2) behaviour in parser. Original Review URL: https://codereview.chromium.org/1763443003 . (cherry picked from commit f3e3af606958855c9345dd3aba13e75f0b879193) TBR=dsinclair@chromium.org, ochang@chromium.org BUG=pdfium:424 BUG=592730 Review URL: https://codereview.chromium.org/1775933003 . --- core/include/fpdfapi/fpdf_page.h | 6 +++--- core/src/fpdfapi/fpdf_page/fpdf_page.cpp | 8 +------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/core/include/fpdfapi/fpdf_page.h b/core/include/fpdfapi/fpdf_page.h index 3d98e34578..7891c701a0 100644 --- a/core/include/fpdfapi/fpdf_page.h +++ b/core/include/fpdfapi/fpdf_page.h @@ -7,7 +7,7 @@ #ifndef CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_ #define CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_ -#include +#include #include #include "core/include/fpdfapi/fpdf_parser.h" @@ -28,9 +28,9 @@ class CPDF_StreamContentParser; #define PDFTRANS_ISOLATED 0x0200 #define PDFTRANS_KNOCKOUT 0x0400 -class CPDF_PageObjectList : public std::list> { +class CPDF_PageObjectList + : public std::deque> { public: - // Linear complexity, to be avoided except as needed by public APIs. CPDF_PageObject* GetPageObjectByIndex(int index); }; diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page.cpp index f05c4bea92..f820560337 100644 --- a/core/src/fpdfapi/fpdf_page/fpdf_page.cpp +++ b/core/src/fpdfapi/fpdf_page/fpdf_page.cpp @@ -463,13 +463,7 @@ void CPDF_FormObject::CalcBoundingBox() { CPDF_PageObject* CPDF_PageObjectList::GetPageObjectByIndex(int index) { if (index < 0 || index >= pdfium::CollectionSize(*this)) return nullptr; - int current = 0; - for (const auto& pObj : *this) { - if (index == current) - return pObj.get(); - ++current; - } - return nullptr; + return (*this)[index].get(); } CPDF_PageObjectHolder::CPDF_PageObjectHolder() -- cgit v1.2.3