summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2016-03-08 11:51:27 -0800
committerTom Sepez <tsepez@chromium.org>2016-03-08 11:51:27 -0800
commit1d1ee8300f2cf1a191efb9f3495485c71bd75858 (patch)
treec28cba401ec0565d2596eac244fab7f397dc3528
parent8ba5b59356d506d3b9e976e7422e69bbd5bec8d6 (diff)
downloadpdfium-1d1ee8300f2cf1a191efb9f3495485c71bd75858.tar.xz
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 .
-rw-r--r--core/include/fpdfapi/fpdf_page.h6
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page.cpp8
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 <list>
+#include <deque>
#include <memory>
#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<std::unique_ptr<CPDF_PageObject>> {
+class CPDF_PageObjectList
+ : public std::deque<std::unique_ptr<CPDF_PageObject>> {
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<int>(*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()