From 81692ab7daf5389bae1bed55c4a3a8e9e68fada4 Mon Sep 17 00:00:00 2001 From: Artem Strygin Date: Wed, 23 Aug 2017 15:53:20 +0300 Subject: Simplify Trailers usage in CPDF_Parser. Do not store non main trailers in memory. Improve readability. Change-Id: I2eab5d31a5be056871e7e5953e4b38662b91f5ae Reviewed-on: https://pdfium-review.googlesource.com/10750 Commit-Queue: Art Snake Reviewed-by: dsinclair --- core/fpdfapi/parser/cpdf_parser.h | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'core/fpdfapi/parser/cpdf_parser.h') diff --git a/core/fpdfapi/parser/cpdf_parser.h b/core/fpdfapi/parser/cpdf_parser.h index f636704162..437f214db6 100644 --- a/core/fpdfapi/parser/cpdf_parser.h +++ b/core/fpdfapi/parser/cpdf_parser.h @@ -61,10 +61,7 @@ class CPDF_Parser { void SetPassword(const char* password) { m_Password = password; } CFX_ByteString GetPassword() { return m_Password; } - CPDF_Dictionary* GetTrailer() const { - return m_TrailerPos == kInvalidPos ? nullptr - : m_Trailers[m_TrailerPos].get(); - } + CPDF_Dictionary* GetTrailer() const; FX_FILESIZE GetLastXRefOffset() const { return m_LastXRefOffset; } uint32_t GetPermissions() const; @@ -128,6 +125,8 @@ class CPDF_Parser { private: friend class CPDF_DataAvail; + class TrailerData; + enum class ParserState { kDefault, kComment, @@ -176,8 +175,7 @@ class CPDF_Parser { uint32_t start_objnum, uint32_t count, std::vector* out_objects); - bool ParseCrossRefV4(std::vector* out_objects, - uint32_t* start_obj_num_at_last_block); + bool ParseCrossRefV4(std::vector* out_objects); void MergeCrossRefObjectsData(const std::vector& objects); std::unique_ptr ParseIndirectObjectAtInternal( @@ -199,10 +197,9 @@ class CPDF_Parser { FX_FILESIZE m_LastXRefOffset; std::unique_ptr m_pSecurityHandler; CFX_ByteString m_Password; - std::vector> m_Trailers; - size_t m_TrailerPos; + std::unique_ptr m_TrailerData; std::unique_ptr m_pLinearized; - uint32_t m_dwXrefStartObjNum; + uint32_t m_linearized_first_page_cross_ref_start_obj_num; // A map of object numbers to indirect streams. std::map> m_ObjectStreamMap; -- cgit v1.2.3