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.h84
1 files changed, 24 insertions, 60 deletions
diff --git a/core/include/fpdfapi/fpdf_parser.h b/core/include/fpdfapi/fpdf_parser.h
index 294c0c5f4a..62c2a8b1a1 100644
--- a/core/include/fpdfapi/fpdf_parser.h
+++ b/core/include/fpdfapi/fpdf_parser.h
@@ -27,9 +27,9 @@ class CPDF_Image;
class CPDF_Object;
class CPDF_Parser;
class CPDF_Pattern;
-class CPDF_SecurityHandler;
class CPDF_StandardSecurityHandler;
class IFX_FileRead;
+class IPDF_SecurityHandler;
#define FPDFPERM_PRINT 0x0004
#define FPDFPERM_MODIFY 0x0008
@@ -104,8 +104,6 @@ class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjectHolder {
FX_DWORD GetUserPermissions(FX_BOOL bCheckRevision = FALSE) const;
- FX_BOOL IsOwner() const;
-
CPDF_DocPageData* GetPageData() { return GetValidatePageData(); }
void ClearPageData();
@@ -248,7 +246,7 @@ class CPDF_SyntaxParser {
void InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset);
- FX_FILESIZE SavePos() { return m_Pos; }
+ FX_FILESIZE SavePos() const { return m_Pos; }
void RestorePos(FX_FILESIZE pos) { m_Pos = pos; }
@@ -263,14 +261,8 @@ class CPDF_SyntaxParser {
int GetDirectNum();
- CFX_ByteString GetString(FX_DWORD objnum, FX_DWORD gennum);
-
- CFX_ByteString GetName();
-
CFX_ByteString GetKeyword();
- void GetBinary(uint8_t* buffer, FX_DWORD size);
-
void ToNextLine();
void ToNextWord();
@@ -286,11 +278,7 @@ class CPDF_SyntaxParser {
FX_FILESIZE FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit);
- void SetEncrypt(CPDF_CryptoHandler* pCryptoHandler) {
- m_pCryptoHandler.reset(pCryptoHandler);
- }
-
- FX_BOOL IsEncrypted() { return m_pCryptoHandler != NULL; }
+ void SetEncrypt(std::unique_ptr<CPDF_CryptoHandler> pCryptoHandler);
FX_BOOL GetCharAt(FX_FILESIZE pos, uint8_t& ch);
@@ -353,13 +341,8 @@ class CPDF_Parser {
CPDF_Parser();
~CPDF_Parser();
- Error StartParse(IFX_FileRead* pFile,
- FX_BOOL bReParse = FALSE,
- FX_BOOL bOwnFileRead = TRUE);
- void CloseParser(FX_BOOL bReParse = FALSE);
-
+ Error StartParse(IFX_FileRead* pFile);
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; }
@@ -368,9 +351,6 @@ class CPDF_Parser {
return m_Syntax.m_pCryptoHandler.get();
}
- void SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler,
- FX_BOOL bForced = FALSE);
-
CPDF_Dictionary* GetTrailer() const { return m_pTrailer; }
FX_FILESIZE GetLastXRefOffset() const { return m_LastXRefOffset; }
CPDF_Document* GetDocument() const { return m_pDocument; }
@@ -386,6 +366,11 @@ class CPDF_Parser {
FX_DWORD GetLastObjNum() const;
bool IsValidObjectNumber(FX_DWORD objnum) const;
+ FX_FILESIZE GetObjectPositionOrZero(FX_DWORD objnum) const;
+ uint8_t GetObjectType(FX_DWORD objnum) const;
+ uint16_t GetObjectGenNum(FX_DWORD objnum) const;
+ bool IsVersionUpdated() const { return m_bVersionUpdated; }
+ bool IsObjectFreeOrNull(FX_DWORD objnum) const;
FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm);
FX_FILESIZE GetObjectOffset(FX_DWORD objnum) const;
@@ -406,13 +391,12 @@ class CPDF_Parser {
FX_DWORD objnum,
FX_FILESIZE* pResultPos);
- Error StartAsynParse(IFX_FileRead* pFile,
- FX_BOOL bReParse = FALSE,
- FX_BOOL bOwnFileRead = TRUE);
+ Error StartAsyncParse(IFX_FileRead* pFile);
FX_DWORD GetFirstPageNo() const { return m_dwFirstPageNo; }
protected:
+ void CloseParser();
CPDF_Object* ParseDirect(CPDF_Object* pObj);
FX_BOOL LoadAllCrossRefV4(FX_FILESIZE pos);
FX_BOOL LoadAllCrossRefV5(FX_FILESIZE pos);
@@ -430,19 +414,17 @@ class CPDF_Parser {
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;
+ 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;
+ std::unique_ptr<IPDF_SecurityHandler> m_pSecurityHandler;
CFX_ByteString m_bsRecipient;
CFX_ByteString m_FilePath;
CFX_ByteString m_Password;
@@ -482,7 +464,6 @@ class CPDF_Parser {
// All indirect object numbers that are being parsed.
std::set<FX_DWORD> m_ParsingObjNums;
- friend class CPDF_Creator;
friend class CPDF_DataAvail;
};
@@ -490,43 +471,42 @@ class CPDF_Parser {
#define FXCIPHER_RC4 1
#define FXCIPHER_AES 2
#define FXCIPHER_AES2 3
-class CPDF_SecurityHandler {
+
+class IPDF_SecurityHandler {
public:
- virtual ~CPDF_SecurityHandler() {}
+ virtual ~IPDF_SecurityHandler() {}
virtual FX_BOOL OnInit(CPDF_Parser* pParser,
CPDF_Dictionary* pEncryptDict) = 0;
virtual FX_DWORD GetPermissions() = 0;
- virtual FX_BOOL IsOwner() = 0;
-
virtual FX_BOOL GetCryptInfo(int& cipher,
const uint8_t*& buffer,
int& keylen) = 0;
- virtual FX_BOOL IsMetadataEncrypted() { return TRUE; }
+ virtual FX_BOOL IsMetadataEncrypted() = 0;
virtual CPDF_CryptoHandler* CreateCryptoHandler() = 0;
virtual CPDF_StandardSecurityHandler* GetStandardHandler() { return NULL; }
};
+
#define PDF_ENCRYPT_CONTENT 0
-class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler {
+
+class CPDF_StandardSecurityHandler : public IPDF_SecurityHandler {
public:
CPDF_StandardSecurityHandler();
~CPDF_StandardSecurityHandler() override;
- // CPDF_SecurityHandler
+ // IPDF_SecurityHandler:
FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict) override;
FX_DWORD GetPermissions() override;
- FX_BOOL IsOwner() override { return m_bOwner; }
FX_BOOL GetCryptInfo(int& cipher,
const uint8_t*& buffer,
int& keylen) override;
FX_BOOL IsMetadataEncrypted() override;
CPDF_CryptoHandler* CreateCryptoHandler() override;
- CPDF_StandardSecurityHandler* GetStandardHandler() override { return this; }
void OnCreate(CPDF_Dictionary* pEncryptDict,
CPDF_Array* pIdArray,
@@ -542,17 +522,9 @@ class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler {
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,
@@ -607,8 +579,6 @@ class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler {
FX_DWORD type);
FX_BOOL CheckSecurity(int32_t key_len);
- FX_BOOL m_bOwner;
-
FX_DWORD m_Permissions;
int m_Cipher;
@@ -618,14 +588,14 @@ class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler {
int m_KeyLen;
};
-CPDF_SecurityHandler* FPDF_CreateStandardSecurityHandler();
+IPDF_SecurityHandler* FPDF_CreateStandardSecurityHandler();
class CPDF_CryptoHandler {
public:
virtual ~CPDF_CryptoHandler() {}
virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict,
- CPDF_SecurityHandler* pSecurityHandler) = 0;
+ IPDF_SecurityHandler* pSecurityHandler) = 0;
virtual FX_DWORD DecryptGetSize(FX_DWORD src_size) = 0;
@@ -659,7 +629,7 @@ class CPDF_StandardCryptoHandler : public CPDF_CryptoHandler {
// CPDF_CryptoHandler
FX_BOOL Init(CPDF_Dictionary* pEncryptDict,
- CPDF_SecurityHandler* pSecurityHandler) override;
+ IPDF_SecurityHandler* pSecurityHandler) override;
FX_DWORD DecryptGetSize(FX_DWORD src_size) override;
void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum) override;
FX_BOOL DecryptStream(void* context,
@@ -753,8 +723,6 @@ class CFDF_Document : public CPDF_IndirectObjectHolder {
CPDF_Dictionary* GetRoot() const { return m_pRootDict; }
- CFX_WideString GetWin32Path() const;
-
protected:
CFDF_Document();
void ParseStream(IFX_FileRead* pFile, FX_BOOL bOwnFile);
@@ -763,10 +731,6 @@ class CFDF_Document : public CPDF_IndirectObjectHolder {
FX_BOOL m_bOwnFile;
};
-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,