Index: core/include/fpdfapi/fpdf_parser.h |
diff --git a/core/include/fpdfapi/fpdf_parser.h b/core/include/fpdfapi/fpdf_parser.h |
index f0b50f8638ac9920768141d24fae0ea29f2735b1..294c0c5f4a34d619957e924a6bf91b3f680f3b10 100644 |
--- a/core/include/fpdfapi/fpdf_parser.h |
+++ b/core/include/fpdfapi/fpdf_parser.h |
@@ -328,52 +328,40 @@ class CPDF_SyntaxParser { |
FX_DWORD gennum); |
FX_FILESIZE m_Pos; |
- |
int m_MetadataObjnum; |
- |
IFX_FileRead* m_pFileAccess; |
- |
FX_DWORD m_HeaderOffset; |
- |
FX_FILESIZE m_FileLen; |
- |
uint8_t* m_pFileBuf; |
- |
FX_DWORD m_BufSize; |
- |
FX_FILESIZE m_BufOffset; |
- |
std::unique_ptr<CPDF_CryptoHandler> m_pCryptoHandler; |
- |
uint8_t m_WordBuffer[257]; |
- |
FX_DWORD m_WordSize; |
}; |
-#define PDFPARSE_ERROR_SUCCESS 0 |
-#define PDFPARSE_ERROR_FILE 1 |
-#define PDFPARSE_ERROR_FORMAT 2 |
-#define PDFPARSE_ERROR_PASSWORD 3 |
-#define PDFPARSE_ERROR_HANDLER 4 |
-#define PDFPARSE_ERROR_CERT 5 |
- |
class CPDF_Parser { |
public: |
+ enum Error { |
+ SUCCESS = 0, |
+ FILE_ERROR, |
+ FORMAT_ERROR, |
+ PASSWORD_ERROR, |
+ HANDLER_ERROR |
+ }; |
+ |
CPDF_Parser(); |
~CPDF_Parser(); |
- FX_DWORD StartParse(IFX_FileRead* pFile, |
- FX_BOOL bReParse = FALSE, |
- FX_BOOL bOwnFileRead = TRUE); |
- |
+ Error StartParse(IFX_FileRead* pFile, |
+ FX_BOOL bReParse = FALSE, |
+ FX_BOOL bOwnFileRead = TRUE); |
void CloseParser(FX_BOOL bReParse = FALSE); |
FX_DWORD GetPermissions(FX_BOOL bCheckRevision = FALSE); |
- |
FX_BOOL IsOwner(); |
void SetPassword(const FX_CHAR* password) { m_Password = password; } |
- |
CFX_ByteString GetPassword() { return m_Password; } |
CPDF_CryptoHandler* GetCryptoHandler() { |
@@ -383,17 +371,15 @@ class CPDF_Parser { |
void SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, |
FX_BOOL bForced = FALSE); |
- CPDF_Dictionary* GetTrailer() { return m_pTrailer; } |
- |
- FX_FILESIZE GetLastXRefOffset() { return m_LastXRefOffset; } |
- |
- CPDF_Document* GetDocument() { return m_pDocument; } |
+ CPDF_Dictionary* GetTrailer() const { return m_pTrailer; } |
+ FX_FILESIZE GetLastXRefOffset() const { return m_LastXRefOffset; } |
+ CPDF_Document* GetDocument() const { return m_pDocument; } |
FX_DWORD GetRootObjNum(); |
FX_DWORD GetInfoObjNum(); |
CPDF_Array* GetIDArray(); |
- CPDF_Dictionary* GetEncryptDict() { return m_pEncryptDict; } |
+ CPDF_Dictionary* GetEncryptDict() const { return m_pEncryptDict; } |
CPDF_Object* ParseIndirectObject(CPDF_IndirectObjectHolder* pObjList, |
FX_DWORD objnum); |
@@ -403,16 +389,13 @@ class CPDF_Parser { |
FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm); |
FX_FILESIZE GetObjectOffset(FX_DWORD objnum) const; |
- |
FX_FILESIZE GetObjectSize(FX_DWORD objnum) const; |
void GetIndirectBinary(FX_DWORD objnum, uint8_t*& pBuffer, FX_DWORD& size); |
- |
IFX_FileRead* GetFileAccess() const { return m_Syntax.m_pFileAccess; } |
- |
int GetFileVersion() const { return m_FileVersion; } |
- |
FX_BOOL IsXRefStream() const { return m_bXRefStream; } |
+ |
CPDF_Object* ParseIndirectObjectAt(CPDF_IndirectObjectHolder* pObjList, |
FX_FILESIZE pos, |
FX_DWORD objnum); |
@@ -423,72 +406,45 @@ class CPDF_Parser { |
FX_DWORD objnum, |
FX_FILESIZE* pResultPos); |
- FX_DWORD StartAsynParse(IFX_FileRead* pFile, |
- FX_BOOL bReParse = FALSE, |
- FX_BOOL bOwnFileRead = TRUE); |
+ Error StartAsynParse(IFX_FileRead* pFile, |
+ FX_BOOL bReParse = FALSE, |
+ FX_BOOL bOwnFileRead = TRUE); |
- FX_DWORD GetFirstPageNo() { return m_dwFirstPageNo; } |
+ FX_DWORD GetFirstPageNo() const { return m_dwFirstPageNo; } |
protected: |
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(); |
- |
- FX_DWORD SetEncryptHandler(); |
- |
+ Error SetEncryptHandler(); |
void ReleaseEncryptHandler(); |
- |
FX_BOOL LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount); |
- |
FX_BOOL LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount); |
- |
FX_BOOL LoadLinearizedAllCrossRefV5(FX_FILESIZE pos); |
- |
- FX_DWORD LoadLinearizedMainXRefTable(); |
- |
+ Error LoadLinearizedMainXRefTable(); |
CPDF_StreamAcc* GetObjectStream(FX_DWORD number); |
- |
FX_BOOL IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset); |
- |
bool FindPosInOffsets(FX_FILESIZE pos) const; |
- |
void SetEncryptDictionary(CPDF_Dictionary* pDict); |
- |
FX_FILESIZE GetObjectPositionOrZero(FX_DWORD objnum) const; |
void ShrinkObjectMap(FX_DWORD size); |
CPDF_Document* m_pDocument; |
- |
CPDF_SyntaxParser m_Syntax; |
FX_BOOL m_bOwnFileRead; |
int m_FileVersion; |
- |
CPDF_Dictionary* m_pTrailer; |
- |
CPDF_Dictionary* m_pEncryptDict; |
- |
FX_FILESIZE m_LastXRefOffset; |
- |
FX_BOOL m_bXRefStream; |
- |
std::unique_ptr<CPDF_SecurityHandler> m_pSecurityHandler; |
- |
FX_BOOL m_bForceUseSecurityHandler; |
- |
CFX_ByteString m_bsRecipient; |
- |
CFX_ByteString m_FilePath; |
- |
CFX_ByteString m_Password; |
struct ObjectInfo { |
@@ -505,17 +461,11 @@ class CPDF_Parser { |
CFX_ByteArray m_V5Type; |
CFX_WordArray m_ObjVersion; |
- |
CFX_FileSizeArray m_SortedOffset; |
- |
CFX_ArrayTemplate<CPDF_Dictionary*> m_Trailers; |
- |
FX_BOOL m_bVersionUpdated; |
- |
CPDF_Object* m_pLinearized; |
- |
FX_DWORD m_dwFirstPageNo; |
- |
FX_DWORD m_dwXrefStartObjNum; |
// A map of object numbers to indirect streams. Map owns the streams. |
@@ -667,6 +617,9 @@ class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler { |
int m_KeyLen; |
}; |
+ |
+CPDF_SecurityHandler* FPDF_CreateStandardSecurityHandler(); |
+ |
class CPDF_CryptoHandler { |
public: |
virtual ~CPDF_CryptoHandler() {} |