diff options
author | dsinclair <dsinclair@chromium.org> | 2016-08-24 11:58:24 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-24 11:58:24 -0700 |
commit | 156de02596e91490bf2432686d0d3c91a5c1a26e (patch) | |
tree | 9990a3cc234c6f3fccfb95201af7bd49f96c4b47 /core/fpdfapi/fpdf_parser/include | |
parent | 0e3e890ba53ee7900ba44ebe50fecba21d086bfc (diff) | |
download | pdfium-156de02596e91490bf2432686d0d3c91a5c1a26e.tar.xz |
Removing CPDF_Parser::CloseParser.chromium/2839
Currently the only calls to CloseParser() happend in the destructor or the
start*Parse methods. The Start*Parse methods are currently only called on
freshly constructed parsers in fpdf_dataavail and fpdfview.
This CL removes the CloseParser() method and puts the contents in the
destructor. We then add an ASSERT that we don't re-enter the parser after it
has already completed the parse.
Review-Url: https://codereview.chromium.org/2267173005
Diffstat (limited to 'core/fpdfapi/fpdf_parser/include')
-rw-r--r-- | core/fpdfapi/fpdf_parser/include/cpdf_parser.h | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/core/fpdfapi/fpdf_parser/include/cpdf_parser.h b/core/fpdfapi/fpdf_parser/include/cpdf_parser.h index d6a5d5703b..3d2408fad1 100644 --- a/core/fpdfapi/fpdf_parser/include/cpdf_parser.h +++ b/core/fpdfapi/fpdf_parser/include/cpdf_parser.h @@ -95,14 +95,37 @@ class CPDF_Parser { uint16_t gennum; }; - void CloseParser(); + std::unique_ptr<CPDF_SyntaxParser> m_pSyntax; + std::map<uint32_t, ObjectInfo> m_ObjectInfo; + + bool LoadCrossRefV4(FX_FILESIZE pos, FX_FILESIZE streampos, FX_BOOL bSkip); + FX_BOOL RebuildCrossRef(); + + private: + friend class CPDF_DataAvail; + + enum class ParserState { + kDefault, + kComment, + kWhitespace, + kString, + kHexString, + kEscapedString, + kXref, + kObjNum, + kPostObjNum, + kGenNum, + kPostGenNum, + kTrailer, + kBeginObj, + kEndObj + }; + CPDF_Object* ParseDirect(CPDF_Object* pObj); FX_BOOL LoadAllCrossRefV4(FX_FILESIZE pos); FX_BOOL LoadAllCrossRefV5(FX_FILESIZE pos); - bool LoadCrossRefV4(FX_FILESIZE pos, FX_FILESIZE streampos, FX_BOOL bSkip); FX_BOOL LoadCrossRefV5(FX_FILESIZE* pos, FX_BOOL bMainXRef); CPDF_Dictionary* LoadTrailerV4(); - FX_BOOL RebuildCrossRef(); Error SetEncryptHandler(); void ReleaseEncryptHandler(); FX_BOOL LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, uint32_t dwObjCount); @@ -118,7 +141,7 @@ class CPDF_Parser { bool VerifyCrossRefV4(); CPDF_Document* m_pDocument; // not owned - std::unique_ptr<CPDF_SyntaxParser> m_pSyntax; + bool m_bHasParsed; bool m_bOwnFileRead; int m_FileVersion; CPDF_Dictionary* m_pTrailer; @@ -127,7 +150,6 @@ class CPDF_Parser { FX_BOOL m_bXRefStream; std::unique_ptr<CPDF_SecurityHandler> m_pSecurityHandler; CFX_ByteString m_Password; - std::map<uint32_t, ObjectInfo> m_ObjectInfo; std::set<FX_FILESIZE> m_SortedOffset; CFX_ArrayTemplate<CPDF_Dictionary*> m_Trailers; bool m_bVersionUpdated; @@ -149,25 +171,7 @@ class CPDF_Parser { // All indirect object numbers that are being parsed. std::set<uint32_t> m_ParsingObjNums; - friend class CPDF_DataAvail; - private: - enum class ParserState { - kDefault, - kComment, - kWhitespace, - kString, - kHexString, - kEscapedString, - kXref, - kObjNum, - kPostObjNum, - kGenNum, - kPostGenNum, - kTrailer, - kBeginObj, - kEndObj - }; }; #endif // CORE_FPDFAPI_FPDF_PARSER_INCLUDE_CPDF_PARSER_H_ |