diff options
author | Wei Li <weili@chromium.org> | 2016-01-14 12:10:20 -0800 |
---|---|---|
committer | Wei Li <weili@chromium.org> | 2016-01-14 12:10:20 -0800 |
commit | 5d5d9fe7bd1c9566b9d6570015b7c60894d9fc0c (patch) | |
tree | ff558a8ca8b51e7c1d7300602aae7d7195c8fb7e /core/include | |
parent | 0b56371b1e9683676cf191f2d9d41d40d47c3726 (diff) | |
download | pdfium-5d5d9fe7bd1c9566b9d6570015b7c60894d9fc0c.tar.xz |
Correct the way to count pages and to avoid infinite loop
BUG=pdfium:360
R=thestig@chromium.org
Review URL: https://codereview.chromium.org/1585823003 .
Diffstat (limited to 'core/include')
-rw-r--r-- | core/include/fpdfapi/fpdf_parser.h | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/core/include/fpdfapi/fpdf_parser.h b/core/include/fpdfapi/fpdf_parser.h index fda4557119..bdddfc37d7 100644 --- a/core/include/fpdfapi/fpdf_parser.h +++ b/core/include/fpdfapi/fpdf_parser.h @@ -61,6 +61,20 @@ inline bool PDFCharIsLineEnding(uint8_t c) { return c == '\r' || c == '\n'; } +template <typename T> +class ScopedSetInsertion { + public: + ScopedSetInsertion(std::set<T>* org_set, T elem) + : m_Set(org_set), m_Entry(elem) { + m_Set->insert(m_Entry); + } + ~ScopedSetInsertion() { m_Set->erase(m_Entry); } + + private: + std::set<T>* const m_Set; + const T m_Entry; +}; + // Indexed by 8-bit char code, contains unicode code points. extern const FX_WORD PDFDocEncoding[256]; @@ -168,7 +182,9 @@ class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjectHolder { CFX_DWordArray m_PageList; - int _GetPageCount() const; + // Retrieve page count information by getting count value from the tree nodes + // or walking through the tree nodes to calculate it. + int RetrievePageCount() const; CPDF_Dictionary* _FindPDFPage(CPDF_Dictionary* pPages, int iPage, int nPagesToGo, |