summaryrefslogtreecommitdiff
path: root/core/fpdfapi/fpdf_parser/include
diff options
context:
space:
mode:
authordsinclair <dsinclair@chromium.org>2016-08-24 11:58:24 -0700
committerCommit bot <commit-bot@chromium.org>2016-08-24 11:58:24 -0700
commit156de02596e91490bf2432686d0d3c91a5c1a26e (patch)
tree9990a3cc234c6f3fccfb95201af7bd49f96c4b47 /core/fpdfapi/fpdf_parser/include
parent0e3e890ba53ee7900ba44ebe50fecba21d086bfc (diff)
downloadpdfium-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.h50
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_