summaryrefslogtreecommitdiff
path: root/core/include/fpdfapi/fpdf_parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/include/fpdfapi/fpdf_parser.h')
-rw-r--r--core/include/fpdfapi/fpdf_parser.h1285
1 files changed, 644 insertions, 641 deletions
diff --git a/core/include/fpdfapi/fpdf_parser.h b/core/include/fpdfapi/fpdf_parser.h
index 951085b33a..f80bb24a87 100644
--- a/core/include/fpdfapi/fpdf_parser.h
+++ b/core/include/fpdfapi/fpdf_parser.h
@@ -34,15 +34,15 @@ class CPDF_Pattern;
class CPDF_FontEncoding;
class CPDF_IccProfile;
class CFX_PrivateData;
-#define FPDFPERM_PRINT 0x0004
-#define FPDFPERM_MODIFY 0x0008
-#define FPDFPERM_EXTRACT 0x0010
-#define FPDFPERM_ANNOT_FORM 0x0020
-#define FPDFPERM_FILL_FORM 0x0100
-#define FPDFPERM_EXTRACT_ACCESS 0x0200
-#define FPDFPERM_ASSEMBLE 0x0400
-#define FPDFPERM_PRINT_HIGH 0x0800
-#define FPDF_PAGE_MAX_NUM 0xFFFFF
+#define FPDFPERM_PRINT 0x0004
+#define FPDFPERM_MODIFY 0x0008
+#define FPDFPERM_EXTRACT 0x0010
+#define FPDFPERM_ANNOT_FORM 0x0020
+#define FPDFPERM_FILL_FORM 0x0100
+#define FPDFPERM_EXTRACT_ACCESS 0x0200
+#define FPDFPERM_ASSEMBLE 0x0400
+#define FPDFPERM_PRINT_HIGH 0x0800
+#define FPDF_PAGE_MAX_NUM 0xFFFFF
// Indexed by 8-bit character code, contains either:
// 'W' - for whitespace: NUL, TAB, CR, LF, FF, 0x80, 0xff
@@ -51,859 +51,862 @@ class CFX_PrivateData;
// 'R' - otherwise.
extern const char PDF_CharType[256];
-class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjects
-{
-public:
- CPDF_Document();
- explicit CPDF_Document(CPDF_Parser* pParser);
+class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjects {
+ public:
+ CPDF_Document();
+ explicit CPDF_Document(CPDF_Parser* pParser);
- ~CPDF_Document();
+ ~CPDF_Document();
- CPDF_Parser* GetParser() const
- {
- return m_pParser;
- }
+ CPDF_Parser* GetParser() const { return m_pParser; }
- CPDF_Dictionary* GetRoot() const
- {
- return m_pRootDict;
- }
+ CPDF_Dictionary* GetRoot() const { return m_pRootDict; }
- CPDF_Dictionary* GetInfo() const
- {
- return m_pInfoDict;
- }
+ CPDF_Dictionary* GetInfo() const { return m_pInfoDict; }
- void GetID(CFX_ByteString& id1, CFX_ByteString& id2) const
- {
- id1 = m_ID1;
- id2 = m_ID2;
- }
+ void GetID(CFX_ByteString& id1, CFX_ByteString& id2) const {
+ id1 = m_ID1;
+ id2 = m_ID2;
+ }
- int GetPageCount() const;
+ int GetPageCount() const;
- CPDF_Dictionary* GetPage(int iPage);
+ CPDF_Dictionary* GetPage(int iPage);
- int GetPageIndex(FX_DWORD objnum);
+ int GetPageIndex(FX_DWORD objnum);
- FX_DWORD GetUserPermissions(FX_BOOL bCheckRevision = FALSE) const;
+ FX_DWORD GetUserPermissions(FX_BOOL bCheckRevision = FALSE) const;
- FX_BOOL IsOwner() const;
+ FX_BOOL IsOwner() const;
+ CPDF_DocPageData* GetPageData() { return GetValidatePageData(); }
+ void ClearPageData();
- CPDF_DocPageData* GetPageData()
- {
- return GetValidatePageData();
- }
+ void RemoveColorSpaceFromPageData(CPDF_Object* pObject);
- void ClearPageData();
+ CPDF_DocRenderData* GetRenderData() { return GetValidateRenderData(); }
- void RemoveColorSpaceFromPageData(CPDF_Object* pObject);
+ void ClearRenderData();
+ void ClearRenderFont();
- CPDF_DocRenderData* GetRenderData()
- {
- return GetValidateRenderData();
- }
+ FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const;
- void ClearRenderData();
+ // |pFontDict| must not be null.
+ CPDF_Font* LoadFont(CPDF_Dictionary* pFontDict);
- void ClearRenderFont();
+ CPDF_ColorSpace* LoadColorSpace(CPDF_Object* pCSObj,
+ CPDF_Dictionary* pResources = NULL);
+ CPDF_Pattern* LoadPattern(CPDF_Object* pObj,
+ FX_BOOL bShading,
+ const CFX_AffineMatrix* matrix = NULL);
- FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const;
+ CPDF_Image* LoadImageF(CPDF_Object* pObj);
- // |pFontDict| must not be null.
- CPDF_Font* LoadFont(CPDF_Dictionary* pFontDict);
+ CPDF_StreamAcc* LoadFontFile(CPDF_Stream* pStream);
- CPDF_ColorSpace* LoadColorSpace(CPDF_Object* pCSObj, CPDF_Dictionary* pResources = NULL);
-
- CPDF_Pattern* LoadPattern(CPDF_Object* pObj, FX_BOOL bShading, const CFX_AffineMatrix* matrix = NULL);
-
- CPDF_Image* LoadImageF(CPDF_Object* pObj);
-
- CPDF_StreamAcc* LoadFontFile(CPDF_Stream* pStream);
-
- CPDF_IccProfile* LoadIccProfile(CPDF_Stream* pStream);
+ CPDF_IccProfile* LoadIccProfile(CPDF_Stream* pStream);
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- CPDF_Font* AddWindowsFont(LOGFONTA* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);
- CPDF_Font* AddWindowsFont(LOGFONTW* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);
+ CPDF_Font* AddWindowsFont(LOGFONTA* pLogFont,
+ FX_BOOL bVert,
+ FX_BOOL bTranslateName = FALSE);
+ CPDF_Font* AddWindowsFont(LOGFONTW* pLogFont,
+ FX_BOOL bVert,
+ FX_BOOL bTranslateName = FALSE);
#endif
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- CPDF_Font* AddMacFont(CTFontRef pFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);
+ CPDF_Font* AddMacFont(CTFontRef pFont,
+ FX_BOOL bVert,
+ FX_BOOL bTranslateName = FALSE);
#endif
- CPDF_Font* AddStandardFont(const FX_CHAR* font, CPDF_FontEncoding* pEncoding);
-
-
- CPDF_Font* AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert);
-
- void CreateNewDoc();
-
- CPDF_Dictionary* CreateNewPage(int iPage);
+ CPDF_Font* AddStandardFont(const FX_CHAR* font, CPDF_FontEncoding* pEncoding);
- void DeletePage(int iPage);
+ CPDF_Font* AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert);
- void LoadDoc();
- void LoadAsynDoc(CPDF_Dictionary *pLinearized);
- void LoadPages();
-protected:
+ void CreateNewDoc();
- CPDF_Dictionary* m_pRootDict;
+ CPDF_Dictionary* CreateNewPage(int iPage);
- CPDF_Dictionary* m_pInfoDict;
+ void DeletePage(int iPage);
- CFX_ByteString m_ID1;
+ void LoadDoc();
+ void LoadAsynDoc(CPDF_Dictionary* pLinearized);
+ void LoadPages();
- CFX_ByteString m_ID2;
+ protected:
+ CPDF_Dictionary* m_pRootDict;
+ CPDF_Dictionary* m_pInfoDict;
- FX_BOOL m_bLinearized;
+ CFX_ByteString m_ID1;
- FX_DWORD m_dwFirstPageNo;
+ CFX_ByteString m_ID2;
- FX_DWORD m_dwFirstPageObjNum;
+ FX_BOOL m_bLinearized;
- CFX_DWordArray m_PageList;
+ FX_DWORD m_dwFirstPageNo;
- int _GetPageCount() const;
- CPDF_Dictionary* _FindPDFPage(CPDF_Dictionary* pPages, int iPage, int nPagesToGo, int level);
- int _FindPageIndex(CPDF_Dictionary* pNode, FX_DWORD& skip_count, FX_DWORD objnum, int& index, int level = 0);
- FX_BOOL IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pPageDict);
- FX_BOOL CheckOCGVisible(CPDF_Dictionary* pOCG, FX_BOOL bPrinting);
- CPDF_DocPageData* GetValidatePageData();
- CPDF_DocRenderData* GetValidateRenderData();
- friend class CPDF_Creator;
- friend class CPDF_Parser;
- friend class CPDF_DataAvail;
- friend class CPDF_OCContext;
+ FX_DWORD m_dwFirstPageObjNum;
+ CFX_DWordArray m_PageList;
+ int _GetPageCount() const;
+ CPDF_Dictionary* _FindPDFPage(CPDF_Dictionary* pPages,
+ int iPage,
+ int nPagesToGo,
+ int level);
+ int _FindPageIndex(CPDF_Dictionary* pNode,
+ FX_DWORD& skip_count,
+ FX_DWORD objnum,
+ int& index,
+ int level = 0);
+ FX_BOOL IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pPageDict);
+ FX_BOOL CheckOCGVisible(CPDF_Dictionary* pOCG, FX_BOOL bPrinting);
+ CPDF_DocPageData* GetValidatePageData();
+ CPDF_DocRenderData* GetValidateRenderData();
+ friend class CPDF_Creator;
+ friend class CPDF_Parser;
+ friend class CPDF_DataAvail;
+ friend class CPDF_OCContext;
- CPDF_DocPageData* m_pDocPage;
-
- CPDF_DocRenderData* m_pDocRender;
+ CPDF_DocPageData* m_pDocPage;
+ CPDF_DocRenderData* m_pDocRender;
};
-#define PDFWORD_EOF 0
-#define PDFWORD_NUMBER 1
-#define PDFWORD_TEXT 2
-#define PDFWORD_DELIMITER 3
-#define PDFWORD_NAME 4
-class CPDF_SimpleParser
-{
-public:
-
- CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize);
+#define PDFWORD_EOF 0
+#define PDFWORD_NUMBER 1
+#define PDFWORD_TEXT 2
+#define PDFWORD_DELIMITER 3
+#define PDFWORD_NAME 4
+class CPDF_SimpleParser {
+ public:
+ CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize);
- CPDF_SimpleParser(const CFX_ByteStringC& str);
+ CPDF_SimpleParser(const CFX_ByteStringC& str);
- CFX_ByteStringC GetWord();
+ CFX_ByteStringC GetWord();
- FX_BOOL SearchToken(const CFX_ByteStringC& token);
+ FX_BOOL SearchToken(const CFX_ByteStringC& token);
- FX_BOOL SkipWord(const CFX_ByteStringC& token);
+ FX_BOOL SkipWord(const CFX_ByteStringC& token);
- FX_BOOL FindTagPair(const CFX_ByteStringC& start_token, const CFX_ByteStringC& end_token,
- FX_DWORD& start_pos, FX_DWORD& end_pos);
+ FX_BOOL FindTagPair(const CFX_ByteStringC& start_token,
+ const CFX_ByteStringC& end_token,
+ FX_DWORD& start_pos,
+ FX_DWORD& end_pos);
- FX_BOOL FindTagParam(const CFX_ByteStringC& token, int nParams);
+ FX_BOOL FindTagParam(const CFX_ByteStringC& token, int nParams);
- FX_DWORD GetPos()
- {
- return m_dwCurPos;
- }
+ FX_DWORD GetPos() { return m_dwCurPos; }
- void SetPos(FX_DWORD pos)
- {
- ASSERT(pos <= m_dwSize);
- m_dwCurPos = pos;
- }
-private:
+ void SetPos(FX_DWORD pos) {
+ ASSERT(pos <= m_dwSize);
+ m_dwCurPos = pos;
+ }
- void ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize, int& type);
+ private:
+ void ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize, int& type);
- const uint8_t* m_pData;
+ const uint8_t* m_pData;
- FX_DWORD m_dwSize;
+ FX_DWORD m_dwSize;
- FX_DWORD m_dwCurPos;
+ FX_DWORD m_dwCurPos;
};
-class CPDF_SyntaxParser
-{
-public:
+class CPDF_SyntaxParser {
+ public:
+ CPDF_SyntaxParser();
+ virtual ~CPDF_SyntaxParser();
- CPDF_SyntaxParser();
- virtual ~CPDF_SyntaxParser();
+ void InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset);
- void InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset);
+ FX_FILESIZE SavePos() { return m_Pos; }
- FX_FILESIZE SavePos()
- {
- return m_Pos;
- }
+ void RestorePos(FX_FILESIZE pos) { m_Pos = pos; }
- void RestorePos(FX_FILESIZE pos)
- {
- m_Pos = pos;
- }
+ CPDF_Object* GetObject(CPDF_IndirectObjects* pObjList,
+ FX_DWORD objnum,
+ FX_DWORD gennum,
+ struct PARSE_CONTEXT* pContext = NULL,
+ FX_BOOL bDecrypt = TRUE);
- CPDF_Object* GetObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, struct PARSE_CONTEXT* pContext = NULL, FX_BOOL bDecrypt = TRUE);
+ CPDF_Object* GetObjectByStrict(CPDF_IndirectObjects* pObjList,
+ FX_DWORD objnum,
+ FX_DWORD gennum,
+ struct PARSE_CONTEXT* pContext = NULL);
+ int GetDirectNum();
- CPDF_Object* GetObjectByStrict(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, struct PARSE_CONTEXT* pContext = NULL);
+ CFX_ByteString GetString(FX_DWORD objnum, FX_DWORD gennum);
- int GetDirectNum();
+ CFX_ByteString GetName();
- CFX_ByteString GetString(FX_DWORD objnum, FX_DWORD gennum);
+ CFX_ByteString GetKeyword();
- CFX_ByteString GetName();
+ void GetBinary(uint8_t* buffer, FX_DWORD size);
- CFX_ByteString GetKeyword();
+ void ToNextLine();
- void GetBinary(uint8_t* buffer, FX_DWORD size);
+ void ToNextWord();
- void ToNextLine();
+ FX_BOOL SearchWord(const CFX_ByteStringC& word,
+ FX_BOOL bWholeWord,
+ FX_BOOL bForward,
+ FX_FILESIZE limit);
- void ToNextWord();
+ int SearchMultiWord(const CFX_ByteStringC& words,
+ FX_BOOL bWholeWord,
+ FX_FILESIZE limit);
- FX_BOOL SearchWord(const CFX_ByteStringC& word, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit);
+ FX_FILESIZE FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit);
- int SearchMultiWord(const CFX_ByteStringC& words, FX_BOOL bWholeWord, FX_FILESIZE limit);
+ void SetEncrypt(CPDF_CryptoHandler* pCryptoHandler) {
+ m_pCryptoHandler = pCryptoHandler;
+ }
- FX_FILESIZE FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit);
+ FX_BOOL IsEncrypted() { return m_pCryptoHandler != NULL; }
- void SetEncrypt(CPDF_CryptoHandler* pCryptoHandler)
- {
- m_pCryptoHandler = pCryptoHandler;
- }
+ FX_BOOL GetCharAt(FX_FILESIZE pos, uint8_t& ch);
- FX_BOOL IsEncrypted()
- {
- return m_pCryptoHandler != NULL;
- }
+ FX_BOOL ReadBlock(uint8_t* pBuf, FX_DWORD size);
- FX_BOOL GetCharAt(FX_FILESIZE pos, uint8_t& ch);
+ CFX_ByteString GetNextWord(FX_BOOL& bIsNumber);
- FX_BOOL ReadBlock(uint8_t* pBuf, FX_DWORD size);
+ protected:
+ static const int kParserMaxRecursionDepth = 64;
+ static int s_CurrentRecursionDepth;
- CFX_ByteString GetNextWord(FX_BOOL& bIsNumber);
-protected:
- static const int kParserMaxRecursionDepth = 64;
- static int s_CurrentRecursionDepth;
+ virtual FX_BOOL GetNextChar(uint8_t& ch);
- virtual FX_BOOL GetNextChar(uint8_t& ch);
+ FX_BOOL GetCharAtBackward(FX_FILESIZE pos, uint8_t& ch);
- FX_BOOL GetCharAtBackward(FX_FILESIZE pos, uint8_t& ch);
+ void GetNextWord();
- void GetNextWord();
+ FX_BOOL IsWholeWord(FX_FILESIZE startpos,
+ FX_FILESIZE limit,
+ const uint8_t* tag,
+ FX_DWORD taglen);
- FX_BOOL IsWholeWord(FX_FILESIZE startpos, FX_FILESIZE limit, const uint8_t* tag, FX_DWORD taglen);
+ CFX_ByteString ReadString();
- CFX_ByteString ReadString();
+ CFX_ByteString ReadHexString();
- CFX_ByteString ReadHexString();
+ CPDF_Stream* ReadStream(CPDF_Dictionary* pDict,
+ PARSE_CONTEXT* pContext,
+ FX_DWORD objnum,
+ FX_DWORD gennum);
- CPDF_Stream* ReadStream(CPDF_Dictionary* pDict, PARSE_CONTEXT* pContext, FX_DWORD objnum, FX_DWORD gennum);
+ FX_FILESIZE m_Pos;
- FX_FILESIZE m_Pos;
+ FX_BOOL m_bFileStream;
- FX_BOOL m_bFileStream;
+ int m_MetadataObjnum;
- int m_MetadataObjnum;
+ IFX_FileRead* m_pFileAccess;
- IFX_FileRead* m_pFileAccess;
+ FX_DWORD m_HeaderOffset;
- FX_DWORD m_HeaderOffset;
+ FX_FILESIZE m_FileLen;
- FX_FILESIZE m_FileLen;
+ uint8_t* m_pFileBuf;
- uint8_t* m_pFileBuf;
+ FX_DWORD m_BufSize;
- FX_DWORD m_BufSize;
+ FX_FILESIZE m_BufOffset;
- FX_FILESIZE m_BufOffset;
+ CPDF_CryptoHandler* m_pCryptoHandler;
- CPDF_CryptoHandler* m_pCryptoHandler;
+ uint8_t m_WordBuffer[257];
- uint8_t m_WordBuffer[257];
+ FX_DWORD m_WordSize;
- FX_DWORD m_WordSize;
+ FX_BOOL m_bIsNumber;
- FX_BOOL m_bIsNumber;
-
- FX_FILESIZE m_dwWordPos;
- friend class CPDF_Parser;
- friend class CPDF_DataAvail;
+ FX_FILESIZE m_dwWordPos;
+ friend class CPDF_Parser;
+ friend class CPDF_DataAvail;
};
-#define PDFPARSE_TYPEONLY 1
-#define PDFPARSE_NOSTREAM 2
+#define PDFPARSE_TYPEONLY 1
+#define PDFPARSE_NOSTREAM 2
struct PARSE_CONTEXT {
- uint32_t m_Flags;
- FX_FILESIZE m_DictStart;
- FX_FILESIZE m_DictEnd;
- FX_FILESIZE m_DataStart;
- FX_FILESIZE m_DataEnd;
+ uint32_t m_Flags;
+ FX_FILESIZE m_DictStart;
+ FX_FILESIZE m_DictEnd;
+ FX_FILESIZE m_DataStart;
+ FX_FILESIZE m_DataEnd;
};
-#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:
- CPDF_Parser();
- ~CPDF_Parser();
+#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
- FX_DWORD StartParse(const FX_CHAR* filename, FX_BOOL bReParse = FALSE);
- FX_DWORD StartParse(const FX_WCHAR* filename, FX_BOOL bReParse = FALSE);
- FX_DWORD StartParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE);
+class CPDF_Parser {
+ public:
+ CPDF_Parser();
+ ~CPDF_Parser();
- void CloseParser(FX_BOOL bReParse = FALSE);
-
- FX_DWORD GetPermissions(FX_BOOL bCheckRevision = FALSE);
+ FX_DWORD StartParse(const FX_CHAR* filename, FX_BOOL bReParse = FALSE);
+ FX_DWORD StartParse(const FX_WCHAR* filename, FX_BOOL bReParse = FALSE);
+ FX_DWORD StartParse(IFX_FileRead* pFile,
+ FX_BOOL bReParse = FALSE,
+ FX_BOOL bOwnFileRead = TRUE);
- FX_BOOL IsOwner();
-
- void SetPassword(const FX_CHAR* password)
- {
- m_Password = password;
- }
-
- CFX_ByteString GetPassword()
- {
- return m_Password;
- }
+ void CloseParser(FX_BOOL bReParse = FALSE);
- CPDF_SecurityHandler* GetSecurityHandler()
- {
- return m_pSecurityHandler;
- }
-
- CPDF_CryptoHandler* GetCryptoHandler()
- {
- return m_Syntax.m_pCryptoHandler;
- }
-
- void SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, FX_BOOL bForced = FALSE);
+ FX_DWORD GetPermissions(FX_BOOL bCheckRevision = FALSE);
- CFX_ByteString GetRecipient()
- {
- return m_bsRecipient;
- }
+ FX_BOOL IsOwner();
- CPDF_Dictionary* GetTrailer()
- {
- return m_pTrailer;
- }
+ void SetPassword(const FX_CHAR* password) { m_Password = password; }
- FX_FILESIZE GetLastXRefOffset()
- {
- return m_LastXRefOffset;
- }
+ CFX_ByteString GetPassword() { return m_Password; }
- CPDF_Document* GetDocument()
- {
- return m_pDocument;
- }
+ CPDF_SecurityHandler* GetSecurityHandler() { return m_pSecurityHandler; }
- CFX_ArrayTemplate<CPDF_Dictionary*>* GetOtherTrailers()
- {
- return &m_Trailers;
- }
+ CPDF_CryptoHandler* GetCryptoHandler() { return m_Syntax.m_pCryptoHandler; }
- FX_DWORD GetRootObjNum();
- FX_DWORD GetInfoObjNum() ;
- CPDF_Array* GetIDArray() ;
+ void SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler,
+ FX_BOOL bForced = FALSE);
- CPDF_Dictionary* GetEncryptDict()
- {
- return m_pEncryptDict;
- }
+ CFX_ByteString GetRecipient() { return m_bsRecipient; }
- FX_BOOL IsEncrypted()
- {
- return GetEncryptDict() != NULL;
- }
+ CPDF_Dictionary* GetTrailer() { return m_pTrailer; }
+ FX_FILESIZE GetLastXRefOffset() { return m_LastXRefOffset; }
- CPDF_Object* ParseIndirectObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, PARSE_CONTEXT* pContext = NULL) ;
- FX_DWORD GetLastObjNum();
- FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm);
+ CPDF_Document* GetDocument() { return m_pDocument; }
- FX_FILESIZE GetObjectOffset(FX_DWORD objnum);
+ CFX_ArrayTemplate<CPDF_Dictionary*>* GetOtherTrailers() {
+ return &m_Trailers;
+ }
- FX_FILESIZE GetObjectSize(FX_DWORD objnum);
+ FX_DWORD GetRootObjNum();
+ FX_DWORD GetInfoObjNum();
+ CPDF_Array* GetIDArray();
- int GetObjectVersion(FX_DWORD objnum)
- {
- return m_ObjVersion[objnum];
- }
+ CPDF_Dictionary* GetEncryptDict() { return m_pEncryptDict; }
- void GetIndirectBinary(FX_DWORD objnum, uint8_t*& pBuffer, FX_DWORD& size);
+ FX_BOOL IsEncrypted() { return GetEncryptDict() != NULL; }
- FX_BOOL GetFileStreamOption()
- {
- return m_Syntax.m_bFileStream;
- }
+ CPDF_Object* ParseIndirectObject(CPDF_IndirectObjects* pObjList,
+ FX_DWORD objnum,
+ PARSE_CONTEXT* pContext = NULL);
+ FX_DWORD GetLastObjNum();
+ FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm);
- void SetFileStreamOption(FX_BOOL b)
- {
- m_Syntax.m_bFileStream = b;
- }
+ FX_FILESIZE GetObjectOffset(FX_DWORD objnum);
- IFX_FileRead* GetFileAccess() const
- {
- return m_Syntax.m_pFileAccess;
- }
+ FX_FILESIZE GetObjectSize(FX_DWORD objnum);
- int GetFileVersion() const
- {
- return m_FileVersion;
- }
+ int GetObjectVersion(FX_DWORD objnum) { return m_ObjVersion[objnum]; }
- FX_BOOL IsXRefStream() const
- {
- return m_bXRefStream;
- }
- CPDF_Object* ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,
- struct PARSE_CONTEXT* pContext);
+ void GetIndirectBinary(FX_DWORD objnum, uint8_t*& pBuffer, FX_DWORD& size);
- CPDF_Object* ParseIndirectObjectAtByStrict(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,
- struct PARSE_CONTEXT* pContext, FX_FILESIZE *pResultPos);
+ FX_BOOL GetFileStreamOption() { return m_Syntax.m_bFileStream; }
- FX_DWORD StartAsynParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE);
+ void SetFileStreamOption(FX_BOOL b) { m_Syntax.m_bFileStream = b; }
- FX_DWORD GetFirstPageNo()
- {
- return m_dwFirstPageNo;
- }
-protected:
- CPDF_Document* m_pDocument;
+ IFX_FileRead* GetFileAccess() const { return m_Syntax.m_pFileAccess; }
- CPDF_SyntaxParser m_Syntax;
- FX_BOOL m_bOwnFileRead;
- CPDF_Object* ParseDirect(CPDF_Object* pObj);
+ int GetFileVersion() const { return m_FileVersion; }
- FX_BOOL LoadAllCrossRefV4(FX_FILESIZE pos);
+ FX_BOOL IsXRefStream() const { return m_bXRefStream; }
+ CPDF_Object* ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList,
+ FX_FILESIZE pos,
+ FX_DWORD objnum,
+ struct PARSE_CONTEXT* pContext);
- FX_BOOL LoadAllCrossRefV5(FX_FILESIZE pos);
+ CPDF_Object* ParseIndirectObjectAtByStrict(CPDF_IndirectObjects* pObjList,
+ FX_FILESIZE pos,
+ FX_DWORD objnum,
+ struct PARSE_CONTEXT* pContext,
+ FX_FILESIZE* pResultPos);
- FX_BOOL LoadCrossRefV4(FX_FILESIZE pos, FX_FILESIZE streampos, FX_BOOL bSkip, FX_BOOL bFirst);
+ FX_DWORD StartAsynParse(IFX_FileRead* pFile,
+ FX_BOOL bReParse = FALSE,
+ FX_BOOL bOwnFileRead = TRUE);
- FX_BOOL LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL bMainXRef);
+ FX_DWORD GetFirstPageNo() { return m_dwFirstPageNo; }
- CPDF_Dictionary* LoadTrailerV4();
+ protected:
+ CPDF_Document* m_pDocument;
- FX_BOOL RebuildCrossRef();
+ CPDF_SyntaxParser m_Syntax;
+ FX_BOOL m_bOwnFileRead;
+ CPDF_Object* ParseDirect(CPDF_Object* pObj);
- FX_DWORD SetEncryptHandler();
+ FX_BOOL LoadAllCrossRefV4(FX_FILESIZE pos);
- void ReleaseEncryptHandler();
+ FX_BOOL LoadAllCrossRefV5(FX_FILESIZE pos);
- FX_BOOL LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
+ FX_BOOL LoadCrossRefV4(FX_FILESIZE pos,
+ FX_FILESIZE streampos,
+ FX_BOOL bSkip,
+ FX_BOOL bFirst);
- FX_BOOL LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
+ FX_BOOL LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL bMainXRef);
- FX_BOOL LoadLinearizedAllCrossRefV5(FX_FILESIZE pos);
+ CPDF_Dictionary* LoadTrailerV4();
- FX_DWORD LoadLinearizedMainXRefTable();
+ FX_BOOL RebuildCrossRef();
- CFX_MapPtrToPtr m_ObjectStreamMap;
+ FX_DWORD SetEncryptHandler();
- CPDF_StreamAcc* GetObjectStream(FX_DWORD number);
+ void ReleaseEncryptHandler();
- FX_BOOL IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset);
+ FX_BOOL LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
+ FX_BOOL LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
+ FX_BOOL LoadLinearizedAllCrossRefV5(FX_FILESIZE pos);
- int m_FileVersion;
+ FX_DWORD LoadLinearizedMainXRefTable();
- CPDF_Dictionary* m_pTrailer;
+ CFX_MapPtrToPtr m_ObjectStreamMap;
- CPDF_Dictionary* m_pEncryptDict;
- void SetEncryptDictionary(CPDF_Dictionary* pDict);
+ CPDF_StreamAcc* GetObjectStream(FX_DWORD number);
- FX_FILESIZE m_LastXRefOffset;
+ FX_BOOL IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset);
- FX_BOOL m_bXRefStream;
+ int m_FileVersion;
+ CPDF_Dictionary* m_pTrailer;
- CPDF_SecurityHandler* m_pSecurityHandler;
+ CPDF_Dictionary* m_pEncryptDict;
+ void SetEncryptDictionary(CPDF_Dictionary* pDict);
- FX_BOOL m_bForceUseSecurityHandler;
+ FX_FILESIZE m_LastXRefOffset;
- CFX_ByteString m_bsRecipient;
+ FX_BOOL m_bXRefStream;
- CFX_ByteString m_FilePath;
+ CPDF_SecurityHandler* m_pSecurityHandler;
- CFX_ByteString m_Password;
+ FX_BOOL m_bForceUseSecurityHandler;
- CFX_FileSizeArray m_CrossRef;
+ CFX_ByteString m_bsRecipient;
- CFX_ByteArray m_V5Type;
+ CFX_ByteString m_FilePath;
- CFX_FileSizeArray m_SortedOffset;
+ CFX_ByteString m_Password;
- CFX_WordArray m_ObjVersion;
- CFX_ArrayTemplate<CPDF_Dictionary *> m_Trailers;
+ CFX_FileSizeArray m_CrossRef;
- FX_BOOL m_bVersionUpdated;
+ CFX_ByteArray m_V5Type;
- CPDF_Object* m_pLinearized;
-
- FX_DWORD m_dwFirstPageNo;
-
- FX_DWORD m_dwXrefStartObjNum;
- friend class CPDF_Creator;
- friend class CPDF_DataAvail;
-};
-#define FXCIPHER_NONE 0
-#define FXCIPHER_RC4 1
-#define FXCIPHER_AES 2
-#define FXCIPHER_AES2 3
-class CPDF_SecurityHandler
-{
-public:
+ CFX_FileSizeArray m_SortedOffset;
- virtual ~CPDF_SecurityHandler() {}
+ CFX_WordArray m_ObjVersion;
+ CFX_ArrayTemplate<CPDF_Dictionary*> m_Trailers;
- virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict) = 0;
+ FX_BOOL m_bVersionUpdated;
- virtual FX_DWORD GetPermissions() = 0;
+ CPDF_Object* m_pLinearized;
- virtual FX_BOOL IsOwner() = 0;
+ FX_DWORD m_dwFirstPageNo;
- virtual FX_BOOL GetCryptInfo(int& cipher, const uint8_t*& buffer, int& keylen) = 0;
-
- virtual FX_BOOL IsMetadataEncrypted()
- {
- return TRUE;
- }
-
- virtual CPDF_CryptoHandler* CreateCryptoHandler() = 0;
-
- virtual CPDF_StandardSecurityHandler* GetStandardHandler()
- {
- return NULL;
- }
-};
-#define PDF_ENCRYPT_CONTENT 0
-class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler
-{
-public:
- CPDF_StandardSecurityHandler();
-
- virtual ~CPDF_StandardSecurityHandler();
- virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict);
- virtual FX_DWORD GetPermissions();
- virtual FX_BOOL IsOwner()
- {
- return m_bOwner;
- }
- virtual FX_BOOL GetCryptInfo(int& cipher, const uint8_t*& buffer, int& keylen);
- virtual FX_BOOL IsMetadataEncrypted();
- virtual CPDF_CryptoHandler* CreateCryptoHandler();
- virtual CPDF_StandardSecurityHandler* GetStandardHandler()
- {
- return this;
- }
-
- void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
- const uint8_t* user_pass, FX_DWORD user_size,
- const uint8_t* owner_pass, FX_DWORD owner_size, FX_DWORD type = PDF_ENCRYPT_CONTENT);
-
- void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
- const uint8_t* user_pass, FX_DWORD user_size, FX_DWORD type = PDF_ENCRYPT_CONTENT);
-
- CFX_ByteString GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size);
- CFX_ByteString GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size, int32_t key_len);
- int GetVersion()
- {
- return m_Version;
- }
- int GetRevision()
- {
- return m_Revision;
- }
-
- int CheckPassword(const uint8_t* password, FX_DWORD pass_size, FX_BOOL bOwner, uint8_t* key);
- int CheckPassword(const uint8_t* password, FX_DWORD pass_size, FX_BOOL bOwner, uint8_t* key, int key_len);
-private:
-
- int m_Version;
-
- int m_Revision;
-
- CPDF_Parser* m_pParser;
-
- CPDF_Dictionary* m_pEncryptDict;
-
- FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict);
- FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict, FX_DWORD type, int& cipher, int& key_len);
-
- FX_BOOL CheckUserPassword(const uint8_t* password, FX_DWORD pass_size,
- FX_BOOL bIgnoreEncryptMeta, uint8_t* key, int32_t key_len);
-
- FX_BOOL CheckOwnerPassword(const uint8_t* password, FX_DWORD pass_size, uint8_t* key, int32_t key_len);
- FX_BOOL AES256_CheckPassword(const uint8_t* password, FX_DWORD size, FX_BOOL bOwner, uint8_t* key);
- void AES256_SetPassword(CPDF_Dictionary* pEncryptDict, const uint8_t* password, FX_DWORD size, FX_BOOL bOwner, const uint8_t* key);
- void AES256_SetPerms(CPDF_Dictionary* pEncryptDict, FX_DWORD permission, FX_BOOL bEncryptMetadata, const uint8_t* key);
- void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
- const uint8_t* user_pass, FX_DWORD user_size,
- const uint8_t* owner_pass, FX_DWORD owner_size, FX_BOOL bDefault, FX_DWORD type);
- FX_BOOL CheckSecurity(int32_t key_len);
-
- FX_BOOL m_bOwner;
-
- FX_DWORD m_Permissions;
-
- int m_Cipher;
-
- uint8_t m_EncryptKey[32];
-
- int m_KeyLen;
+ FX_DWORD m_dwXrefStartObjNum;
+ friend class CPDF_Creator;
+ friend class CPDF_DataAvail;
};
-class CPDF_CryptoHandler
-{
-public:
-
- virtual ~CPDF_CryptoHandler() {}
-
- virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler) = 0;
-
- virtual FX_DWORD DecryptGetSize(FX_DWORD src_size) = 0;
+#define FXCIPHER_NONE 0
+#define FXCIPHER_RC4 1
+#define FXCIPHER_AES 2
+#define FXCIPHER_AES2 3
+class CPDF_SecurityHandler {
+ public:
+ virtual ~CPDF_SecurityHandler() {}
- virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum) = 0;
+ virtual FX_BOOL OnInit(CPDF_Parser* pParser,
+ CPDF_Dictionary* pEncryptDict) = 0;
- virtual FX_BOOL DecryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf) = 0;
+ virtual FX_DWORD GetPermissions() = 0;
- virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf) = 0;
+ virtual FX_BOOL IsOwner() = 0;
+ virtual FX_BOOL GetCryptInfo(int& cipher,
+ const uint8_t*& buffer,
+ int& keylen) = 0;
- virtual FX_DWORD EncryptGetSize(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size) = 0;
+ virtual FX_BOOL IsMetadataEncrypted() { return TRUE; }
- virtual FX_BOOL EncryptContent(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size,
- uint8_t* dest_buf, FX_DWORD& dest_size) = 0;
+ virtual CPDF_CryptoHandler* CreateCryptoHandler() = 0;
- void Decrypt(FX_DWORD objnum, FX_DWORD version, CFX_ByteString& str);
+ virtual CPDF_StandardSecurityHandler* GetStandardHandler() { return NULL; }
};
-class CPDF_StandardCryptoHandler : public CPDF_CryptoHandler
-{
-public:
+#define PDF_ENCRYPT_CONTENT 0
+class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler {
+ public:
+ CPDF_StandardSecurityHandler();
+
+ virtual ~CPDF_StandardSecurityHandler();
+ virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict);
+ virtual FX_DWORD GetPermissions();
+ virtual FX_BOOL IsOwner() { return m_bOwner; }
+ virtual FX_BOOL GetCryptInfo(int& cipher,
+ const uint8_t*& buffer,
+ int& keylen);
+ virtual FX_BOOL IsMetadataEncrypted();
+ virtual CPDF_CryptoHandler* CreateCryptoHandler();
+ virtual CPDF_StandardSecurityHandler* GetStandardHandler() { return this; }
+
+ void OnCreate(CPDF_Dictionary* pEncryptDict,
+ CPDF_Array* pIdArray,
+ const uint8_t* user_pass,
+ FX_DWORD user_size,
+ const uint8_t* owner_pass,
+ FX_DWORD owner_size,
+ FX_DWORD type = PDF_ENCRYPT_CONTENT);
+
+ void OnCreate(CPDF_Dictionary* pEncryptDict,
+ CPDF_Array* pIdArray,
+ const uint8_t* user_pass,
+ FX_DWORD user_size,
+ FX_DWORD type = PDF_ENCRYPT_CONTENT);
+
+ CFX_ByteString GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size);
+ CFX_ByteString GetUserPassword(const uint8_t* owner_pass,
+ FX_DWORD pass_size,
+ int32_t key_len);
+ int GetVersion() { return m_Version; }
+ int GetRevision() { return m_Revision; }
+
+ int CheckPassword(const uint8_t* password,
+ FX_DWORD pass_size,
+ FX_BOOL bOwner,
+ uint8_t* key);
+ int CheckPassword(const uint8_t* password,
+ FX_DWORD pass_size,
+ FX_BOOL bOwner,
+ uint8_t* key,
+ int key_len);
+
+ private:
+ int m_Version;
+
+ int m_Revision;
+
+ CPDF_Parser* m_pParser;
+
+ CPDF_Dictionary* m_pEncryptDict;
+
+ FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict);
+ FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict,
+ FX_DWORD type,
+ int& cipher,
+ int& key_len);
+
+ FX_BOOL CheckUserPassword(const uint8_t* password,
+ FX_DWORD pass_size,
+ FX_BOOL bIgnoreEncryptMeta,
+ uint8_t* key,
+ int32_t key_len);
+
+ FX_BOOL CheckOwnerPassword(const uint8_t* password,
+ FX_DWORD pass_size,
+ uint8_t* key,
+ int32_t key_len);
+ FX_BOOL AES256_CheckPassword(const uint8_t* password,
+ FX_DWORD size,
+ FX_BOOL bOwner,
+ uint8_t* key);
+ void AES256_SetPassword(CPDF_Dictionary* pEncryptDict,
+ const uint8_t* password,
+ FX_DWORD size,
+ FX_BOOL bOwner,
+ const uint8_t* key);
+ void AES256_SetPerms(CPDF_Dictionary* pEncryptDict,
+ FX_DWORD permission,
+ FX_BOOL bEncryptMetadata,
+ const uint8_t* key);
+ void OnCreate(CPDF_Dictionary* pEncryptDict,
+ CPDF_Array* pIdArray,
+ const uint8_t* user_pass,
+ FX_DWORD user_size,
+ const uint8_t* owner_pass,
+ FX_DWORD owner_size,
+ FX_BOOL bDefault,
+ FX_DWORD type);
+ FX_BOOL CheckSecurity(int32_t key_len);
+
+ FX_BOOL m_bOwner;
+
+ FX_DWORD m_Permissions;
+
+ int m_Cipher;
+
+ uint8_t m_EncryptKey[32];
+
+ int m_KeyLen;
+};
+class CPDF_CryptoHandler {
+ public:
+ virtual ~CPDF_CryptoHandler() {}
- CPDF_StandardCryptoHandler();
+ virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict,
+ CPDF_SecurityHandler* pSecurityHandler) = 0;
- virtual ~CPDF_StandardCryptoHandler();
+ virtual FX_DWORD DecryptGetSize(FX_DWORD src_size) = 0;
- FX_BOOL Init(int cipher, const uint8_t* key, int keylen);
- virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler);
- virtual FX_DWORD DecryptGetSize(FX_DWORD src_size);
- virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum);
- virtual FX_BOOL DecryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf);
- virtual FX_DWORD EncryptGetSize(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size);
- virtual FX_BOOL EncryptContent(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size,
- uint8_t* dest_buf, FX_DWORD& dest_size);
-protected:
+ virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum) = 0;
- virtual void CryptBlock(FX_BOOL bEncrypt, FX_DWORD objnum, FX_DWORD gennum, const uint8_t* src_buf, FX_DWORD src_size,
- uint8_t* dest_buf, FX_DWORD& dest_size);
- virtual void* CryptStart(FX_DWORD objnum, FX_DWORD gennum, FX_BOOL bEncrypt);
- virtual FX_BOOL CryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt);
- virtual FX_BOOL CryptFinish(void* context, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt);
+ virtual FX_BOOL DecryptStream(void* context,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) = 0;
- uint8_t m_EncryptKey[32];
+ virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf) = 0;
- int m_KeyLen;
+ virtual FX_DWORD EncryptGetSize(FX_DWORD objnum,
+ FX_DWORD version,
+ const uint8_t* src_buf,
+ FX_DWORD src_size) = 0;
- int m_Cipher;
+ virtual FX_BOOL EncryptContent(FX_DWORD objnum,
+ FX_DWORD version,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t* dest_buf,
+ FX_DWORD& dest_size) = 0;
- uint8_t* m_pAESContext;
+ void Decrypt(FX_DWORD objnum, FX_DWORD version, CFX_ByteString& str);
};
-class CPDF_Point
-{
-public:
-
- CPDF_Point(FX_FLOAT xx, FX_FLOAT yy)
- {
- x = xx;
- y = yy;
- }
+class CPDF_StandardCryptoHandler : public CPDF_CryptoHandler {
+ public:
+ CPDF_StandardCryptoHandler();
+
+ virtual ~CPDF_StandardCryptoHandler();
+
+ FX_BOOL Init(int cipher, const uint8_t* key, int keylen);
+ virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict,
+ CPDF_SecurityHandler* pSecurityHandler);
+ virtual FX_DWORD DecryptGetSize(FX_DWORD src_size);
+ virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum);
+ virtual FX_BOOL DecryptStream(void* context,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf);
+ virtual FX_DWORD EncryptGetSize(FX_DWORD objnum,
+ FX_DWORD version,
+ const uint8_t* src_buf,
+ FX_DWORD src_size);
+ virtual FX_BOOL EncryptContent(FX_DWORD objnum,
+ FX_DWORD version,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t* dest_buf,
+ FX_DWORD& dest_size);
+
+ protected:
+ virtual void CryptBlock(FX_BOOL bEncrypt,
+ FX_DWORD objnum,
+ FX_DWORD gennum,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t* dest_buf,
+ FX_DWORD& dest_size);
+ virtual void* CryptStart(FX_DWORD objnum, FX_DWORD gennum, FX_BOOL bEncrypt);
+ virtual FX_BOOL CryptStream(void* context,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf,
+ FX_BOOL bEncrypt);
+ virtual FX_BOOL CryptFinish(void* context,
+ CFX_BinaryBuf& dest_buf,
+ FX_BOOL bEncrypt);
+
+ uint8_t m_EncryptKey[32];
+
+ int m_KeyLen;
+
+ int m_Cipher;
+
+ uint8_t* m_pAESContext;
+};
+class CPDF_Point {
+ public:
+ CPDF_Point(FX_FLOAT xx, FX_FLOAT yy) {
+ x = xx;
+ y = yy;
+ }
- FX_FLOAT x;
+ FX_FLOAT x;
- FX_FLOAT y;
+ FX_FLOAT y;
};
-#define CPDF_Rect CFX_FloatRect
-#define CPDF_Matrix CFX_AffineMatrix
+#define CPDF_Rect CFX_FloatRect
+#define CPDF_Matrix CFX_AffineMatrix
CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& orig);
CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig);
CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig);
-CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, FX_BOOL bHex = FALSE);
-CFX_WideString PDF_DecodeText(const uint8_t* pData, FX_DWORD size, CFX_CharMap* pCharMap = NULL);
-inline CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr, CFX_CharMap* pCharMap = NULL) {
- return PDF_DecodeText((const uint8_t*)bstr.c_str(), bstr.GetLength(), pCharMap);
+CFX_ByteString PDF_EncodeString(const CFX_ByteString& src,
+ FX_BOOL bHex = FALSE);
+CFX_WideString PDF_DecodeText(const uint8_t* pData,
+ FX_DWORD size,
+ CFX_CharMap* pCharMap = NULL);
+inline CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr,
+ CFX_CharMap* pCharMap = NULL) {
+ return PDF_DecodeText((const uint8_t*)bstr.c_str(), bstr.GetLength(),
+ pCharMap);
}
-CFX_ByteString PDF_EncodeText(const FX_WCHAR* pString, int len = -1, CFX_CharMap* pCharMap = NULL);
-inline CFX_ByteString PDF_EncodeText(const CFX_WideString& str, CFX_CharMap* pCharMap = NULL) {
- return PDF_EncodeText(str.c_str(), str.GetLength(), pCharMap);
+CFX_ByteString PDF_EncodeText(const FX_WCHAR* pString,
+ int len = -1,
+ CFX_CharMap* pCharMap = NULL);
+inline CFX_ByteString PDF_EncodeText(const CFX_WideString& str,
+ CFX_CharMap* pCharMap = NULL) {
+ return PDF_EncodeText(str.c_str(), str.GetLength(), pCharMap);
}
FX_FLOAT PDF_ClipFloat(FX_FLOAT f);
-class CFDF_Document : public CPDF_IndirectObjects
-{
-public:
- static CFDF_Document* CreateNewDoc();
- static CFDF_Document* ParseFile(IFX_FileRead *pFile, FX_BOOL bOwnFile = FALSE);
- static CFDF_Document* ParseMemory(const uint8_t* pData, FX_DWORD size);
-
- ~CFDF_Document();
-
- FX_BOOL WriteBuf(CFX_ByteTextBuf& buf) const;
-
- CPDF_Dictionary* GetRoot() const
- {
- return m_pRootDict;
- }
-
- CFX_WideString GetWin32Path() const;
-protected:
-
- CFDF_Document();
- void ParseStream(IFX_FileRead *pFile, FX_BOOL bOwnFile);
- CPDF_Dictionary* m_pRootDict;
- IFX_FileRead* m_pFile;
- FX_BOOL m_bOwnFile;
-};
+class CFDF_Document : public CPDF_IndirectObjects {
+ public:
+ static CFDF_Document* CreateNewDoc();
+ static CFDF_Document* ParseFile(IFX_FileRead* pFile,
+ FX_BOOL bOwnFile = FALSE);
+ static CFDF_Document* ParseMemory(const uint8_t* pData, FX_DWORD size);
-CFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec);
-void FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec, const CFX_WideString& fullpath);
+ ~CFDF_Document();
-void FlateEncode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
-FX_DWORD FlateDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
-FX_DWORD RunLengthDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
-class CPDF_NumberTree
-{
-public:
+ FX_BOOL WriteBuf(CFX_ByteTextBuf& buf) const;
- CPDF_NumberTree(CPDF_Dictionary* pRoot)
- {
- m_pRoot = pRoot;
- }
+ CPDF_Dictionary* GetRoot() const { return m_pRootDict; }
- CPDF_Object* LookupValue(int num);
-protected:
+ CFX_WideString GetWin32Path() const;
- CPDF_Dictionary* m_pRoot;
+ protected:
+ CFDF_Document();
+ void ParseStream(IFX_FileRead* pFile, FX_BOOL bOwnFile);
+ CPDF_Dictionary* m_pRootDict;
+ IFX_FileRead* m_pFile;
+ FX_BOOL m_bOwnFile;
};
-class IFX_FileAvail
-{
-public:
- virtual ~IFX_FileAvail() { }
- virtual FX_BOOL IsDataAvail( FX_FILESIZE offset, FX_DWORD size) = 0;
+CFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec);
+void FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec,
+ const CFX_WideString& fullpath);
+
+void FlateEncode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+FX_DWORD FlateDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+FX_DWORD RunLengthDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+class CPDF_NumberTree {
+ public:
+ CPDF_NumberTree(CPDF_Dictionary* pRoot) { m_pRoot = pRoot; }
+
+ CPDF_Object* LookupValue(int num);
+
+ protected:
+ CPDF_Dictionary* m_pRoot;
};
-class IFX_DownloadHints
-{
-public:
- virtual ~IFX_DownloadHints() { }
- virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) = 0;
+
+class IFX_FileAvail {
+ public:
+ virtual ~IFX_FileAvail() {}
+ virtual FX_BOOL IsDataAvail(FX_FILESIZE offset, FX_DWORD size) = 0;
};
-#define PDF_IS_LINEARIZED 1
-#define PDF_NOT_LINEARIZED 0
-#define PDF_UNKNOW_LINEARIZED -1
-#define PDFFORM_NOTAVAIL 0
-#define PDFFORM_AVAIL 1
-#define PDFFORM_NOTEXIST 2
-class IPDF_DataAvail
-{
-public:
- static IPDF_DataAvail* Create(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
- virtual ~IPDF_DataAvail() { }
-
- IFX_FileAvail* GetFileAvail() const { return m_pFileAvail; }
- IFX_FileRead* GetFileRead() const { return m_pFileRead; }
-
- virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) = 0;
- virtual void SetDocument(CPDF_Document* pDoc) = 0;
- virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) = 0;
- virtual FX_BOOL IsLinearized() = 0;
- virtual int32_t IsFormAvail(IFX_DownloadHints *pHints) = 0;
- virtual int32_t IsLinearizedPDF() = 0;
- virtual void GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize) = 0;
-
-protected:
- IPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
-
- IFX_FileAvail* m_pFileAvail;
- IFX_FileRead* m_pFileRead;
+class IFX_DownloadHints {
+ public:
+ virtual ~IFX_DownloadHints() {}
+ virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) = 0;
};
-class CPDF_SortObjNumArray
-{
-public:
-
- void AddObjNum(FX_DWORD dwObjNum);
+#define PDF_IS_LINEARIZED 1
+#define PDF_NOT_LINEARIZED 0
+#define PDF_UNKNOW_LINEARIZED -1
+#define PDFFORM_NOTAVAIL 0
+#define PDFFORM_AVAIL 1
+#define PDFFORM_NOTEXIST 2
+class IPDF_DataAvail {
+ public:
+ static IPDF_DataAvail* Create(IFX_FileAvail* pFileAvail,
+ IFX_FileRead* pFileRead);
+ virtual ~IPDF_DataAvail() {}
+
+ IFX_FileAvail* GetFileAvail() const { return m_pFileAvail; }
+ IFX_FileRead* GetFileRead() const { return m_pFileRead; }
+
+ virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) = 0;
+ virtual void SetDocument(CPDF_Document* pDoc) = 0;
+ virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) = 0;
+ virtual FX_BOOL IsLinearized() = 0;
+ virtual int32_t IsFormAvail(IFX_DownloadHints* pHints) = 0;
+ virtual int32_t IsLinearizedPDF() = 0;
+ virtual void GetLinearizedMainXRefInfo(FX_FILESIZE* pPos,
+ FX_DWORD* pSize) = 0;
+
+ protected:
+ IPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
+
+ IFX_FileAvail* m_pFileAvail;
+ IFX_FileRead* m_pFileRead;
+};
+class CPDF_SortObjNumArray {
+ public:
+ void AddObjNum(FX_DWORD dwObjNum);
- FX_BOOL Find(FX_DWORD dwObjNum);
+ FX_BOOL Find(FX_DWORD dwObjNum);
- void RemoveAll()
- {
- m_number_array.RemoveAll();
- }
-protected:
+ void RemoveAll() { m_number_array.RemoveAll(); }
- FX_BOOL BinarySearch(FX_DWORD value, int &iNext);
-protected:
+ protected:
+ FX_BOOL BinarySearch(FX_DWORD value, int& iNext);
- CFX_DWordArray m_number_array;
+ protected:
+ CFX_DWordArray m_number_array;
};
enum PDF_PAGENODE_TYPE {
- PDF_PAGENODE_UNKOWN = 0,
- PDF_PAGENODE_PAGE,
- PDF_PAGENODE_PAGES,
- PDF_PAGENODE_ARRAY,
+ PDF_PAGENODE_UNKOWN = 0,
+ PDF_PAGENODE_PAGE,
+ PDF_PAGENODE_PAGES,
+ PDF_PAGENODE_ARRAY,
};
-class CPDF_PageNode
-{
-public:
- CPDF_PageNode() : m_type(PDF_PAGENODE_UNKOWN) {}
- ~CPDF_PageNode();
- PDF_PAGENODE_TYPE m_type;
- FX_DWORD m_dwPageNo;
- CFX_PtrArray m_childNode;
+class CPDF_PageNode {
+ public:
+ CPDF_PageNode() : m_type(PDF_PAGENODE_UNKOWN) {}
+ ~CPDF_PageNode();
+ PDF_PAGENODE_TYPE m_type;
+ FX_DWORD m_dwPageNo;
+ CFX_PtrArray m_childNode;
};
enum PDF_DATAAVAIL_STATUS {
- PDF_DATAAVAIL_HEADER = 0,
- PDF_DATAAVAIL_FIRSTPAGE,
- PDF_DATAAVAIL_FIRSTPAGE_PREPARE,
- PDF_DATAAVAIL_END,
- PDF_DATAAVAIL_CROSSREF,
- PDF_DATAAVAIL_CROSSREF_ITEM,
- PDF_DATAAVAIL_CROSSREF_STREAM,
- PDF_DATAAVAIL_TRAILER,
- PDF_DATAAVAIL_LOADALLCRSOSSREF,
- PDF_DATAAVAIL_ROOT,
- PDF_DATAAVAIL_INFO,
- PDF_DATAAVAIL_ACROFORM,
- PDF_DATAAVAIL_ACROFORM_SUBOBJECT,
- PDF_DATAAVAIL_PAGETREE,
- PDF_DATAAVAIL_PAGE,
- PDF_DATAAVAIL_PAGE_LATERLOAD,
- PDF_DATAAVAIL_RESOURCES,
- PDF_DATAAVAIL_DONE,
- PDF_DATAAVAIL_ERROR,
- PDF_DATAAVAIL_LOADALLFILE,
- PDF_DATAAVAIL_TRAILER_APPEND
+ PDF_DATAAVAIL_HEADER = 0,
+ PDF_DATAAVAIL_FIRSTPAGE,
+ PDF_DATAAVAIL_FIRSTPAGE_PREPARE,
+ PDF_DATAAVAIL_END,
+ PDF_DATAAVAIL_CROSSREF,
+ PDF_DATAAVAIL_CROSSREF_ITEM,
+ PDF_DATAAVAIL_CROSSREF_STREAM,
+ PDF_DATAAVAIL_TRAILER,
+ PDF_DATAAVAIL_LOADALLCRSOSSREF,
+ PDF_DATAAVAIL_ROOT,
+ PDF_DATAAVAIL_INFO,
+ PDF_DATAAVAIL_ACROFORM,
+ PDF_DATAAVAIL_ACROFORM_SUBOBJECT,
+ PDF_DATAAVAIL_PAGETREE,
+ PDF_DATAAVAIL_PAGE,
+ PDF_DATAAVAIL_PAGE_LATERLOAD,
+ PDF_DATAAVAIL_RESOURCES,
+ PDF_DATAAVAIL_DONE,
+ PDF_DATAAVAIL_ERROR,
+ PDF_DATAAVAIL_LOADALLFILE,
+ PDF_DATAAVAIL_TRAILER_APPEND
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_PARSER_H_