| Index: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| index 97c5a75082ed1604ca88555ac6180e6d5bcd1b19..0b93107e62016898d5c40b21dd593e3676dee193 100644
|
| --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| @@ -2040,16 +2040,13 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjectHolder* pObjList,
|
| FX_BOOL bDecrypt) {
|
| CFX_AutoRestorer<int> restorer(&s_CurrentRecursionDepth);
|
| if (++s_CurrentRecursionDepth > kParserMaxRecursionDepth) {
|
| - return NULL;
|
| + return nullptr;
|
| }
|
| FX_FILESIZE SavedPos = m_Pos;
|
| - FX_BOOL bTypeOnly = pContext && (pContext->m_Flags & PDFPARSE_TYPEONLY);
|
| bool bIsNumber;
|
| CFX_ByteString word = GetNextWord(&bIsNumber);
|
| if (word.GetLength() == 0) {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_INVALID;
|
| - return NULL;
|
| + return nullptr;
|
| }
|
| if (bIsNumber) {
|
| FX_FILESIZE SavedPos = m_Pos;
|
| @@ -2058,29 +2055,19 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjectHolder* pObjList,
|
| CFX_ByteString nextword2 = GetNextWord(nullptr);
|
| if (nextword2 == "R") {
|
| FX_DWORD objnum = FXSYS_atoi(word);
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_REFERENCE;
|
| return new CPDF_Reference(pObjList, objnum);
|
| }
|
| }
|
| m_Pos = SavedPos;
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_NUMBER;
|
| return new CPDF_Number(word);
|
| }
|
| if (word == "true" || word == "false") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_BOOLEAN;
|
| return new CPDF_Boolean(word == "true");
|
| }
|
| if (word == "null") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_NULL;
|
| return new CPDF_Null;
|
| }
|
| if (word == "(") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_STRING;
|
| CFX_ByteString str = ReadString();
|
| if (m_pCryptoHandler && bDecrypt) {
|
| m_pCryptoHandler->Decrypt(objnum, gennum, str);
|
| @@ -2088,8 +2075,6 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjectHolder* pObjList,
|
| return new CPDF_String(str, FALSE);
|
| }
|
| if (word == "<") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_STRING;
|
| CFX_ByteString str = ReadHexString();
|
| if (m_pCryptoHandler && bDecrypt) {
|
| m_pCryptoHandler->Decrypt(objnum, gennum, str);
|
| @@ -2097,8 +2082,6 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjectHolder* pObjList,
|
| return new CPDF_String(str, TRUE);
|
| }
|
| if (word == "[") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_ARRAY;
|
| CPDF_Array* pArray = new CPDF_Array;
|
| while (CPDF_Object* pObj =
|
| GetObject(pObjList, objnum, gennum, nullptr, true)) {
|
| @@ -2107,15 +2090,10 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjectHolder* pObjList,
|
| return pArray;
|
| }
|
| if (word[0] == '/') {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_NAME;
|
| return new CPDF_Name(
|
| PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)));
|
| }
|
| if (word == "<<") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_DICTIONARY;
|
| -
|
| if (pContext)
|
| pContext->m_DictStart = SavedPos;
|
|
|
| @@ -2165,9 +2143,6 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjectHolder* pObjList,
|
| }
|
| if (pContext) {
|
| pContext->m_DictEnd = m_Pos;
|
| - if (pContext->m_Flags & PDFPARSE_NOSTREAM) {
|
| - return pDict.release();
|
| - }
|
| }
|
| FX_FILESIZE SavedPos = m_Pos;
|
| CFX_ByteString nextword = GetNextWord(nullptr);
|
| @@ -2175,16 +2150,11 @@ CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjectHolder* pObjList,
|
| m_Pos = SavedPos;
|
| return pDict.release();
|
| }
|
| -
|
| return ReadStream(pDict.release(), pContext, objnum, gennum);
|
| }
|
| if (word == ">>") {
|
| m_Pos = SavedPos;
|
| - return nullptr;
|
| }
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_INVALID;
|
| -
|
| return nullptr;
|
| }
|
|
|
| @@ -2195,15 +2165,12 @@ CPDF_Object* CPDF_SyntaxParser::GetObjectByStrict(
|
| PARSE_CONTEXT* pContext) {
|
| CFX_AutoRestorer<int> restorer(&s_CurrentRecursionDepth);
|
| if (++s_CurrentRecursionDepth > kParserMaxRecursionDepth) {
|
| - return NULL;
|
| + return nullptr;
|
| }
|
| FX_FILESIZE SavedPos = m_Pos;
|
| - FX_BOOL bTypeOnly = pContext && (pContext->m_Flags & PDFPARSE_TYPEONLY);
|
| bool bIsNumber;
|
| CFX_ByteString word = GetNextWord(&bIsNumber);
|
| if (word.GetLength() == 0) {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_INVALID;
|
| return nullptr;
|
| }
|
| if (bIsNumber) {
|
| @@ -2212,46 +2179,31 @@ CPDF_Object* CPDF_SyntaxParser::GetObjectByStrict(
|
| if (bIsNumber) {
|
| CFX_ByteString nextword2 = GetNextWord(nullptr);
|
| if (nextword2 == "R") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_REFERENCE;
|
| - FX_DWORD objnum = FXSYS_atoi(word);
|
| - return new CPDF_Reference(pObjList, objnum);
|
| + return new CPDF_Reference(pObjList, FXSYS_atoi(word));
|
| }
|
| }
|
| m_Pos = SavedPos;
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_NUMBER;
|
| return new CPDF_Number(word);
|
| }
|
| if (word == "true" || word == "false") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_BOOLEAN;
|
| return new CPDF_Boolean(word == "true");
|
| }
|
| if (word == "null") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_NULL;
|
| return new CPDF_Null;
|
| }
|
| if (word == "(") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_STRING;
|
| CFX_ByteString str = ReadString();
|
| if (m_pCryptoHandler)
|
| m_pCryptoHandler->Decrypt(objnum, gennum, str);
|
| return new CPDF_String(str, FALSE);
|
| }
|
| if (word == "<") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_STRING;
|
| CFX_ByteString str = ReadHexString();
|
| if (m_pCryptoHandler)
|
| m_pCryptoHandler->Decrypt(objnum, gennum, str);
|
| return new CPDF_String(str, TRUE);
|
| }
|
| if (word == "[") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_ARRAY;
|
| std::unique_ptr<CPDF_Array, ReleaseDeleter<CPDF_Array>> pArray(
|
| new CPDF_Array);
|
| while (CPDF_Object* pObj =
|
| @@ -2261,14 +2213,10 @@ CPDF_Object* CPDF_SyntaxParser::GetObjectByStrict(
|
| return m_WordBuffer[0] == ']' ? pArray.release() : nullptr;
|
| }
|
| if (word[0] == '/') {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_NAME;
|
| return new CPDF_Name(
|
| PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)));
|
| }
|
| if (word == "<<") {
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_DICTIONARY;
|
| if (pContext)
|
| pContext->m_DictStart = SavedPos;
|
|
|
| @@ -2306,9 +2254,6 @@ CPDF_Object* CPDF_SyntaxParser::GetObjectByStrict(
|
| }
|
| if (pContext) {
|
| pContext->m_DictEnd = m_Pos;
|
| - if (pContext->m_Flags & PDFPARSE_NOSTREAM) {
|
| - return pDict.release();
|
| - }
|
| }
|
| FX_FILESIZE SavedPos = m_Pos;
|
| CFX_ByteString nextword = GetNextWord(nullptr);
|
| @@ -2321,10 +2266,7 @@ CPDF_Object* CPDF_SyntaxParser::GetObjectByStrict(
|
| }
|
| if (word == ">>") {
|
| m_Pos = SavedPos;
|
| - return nullptr;
|
| }
|
| - if (bTypeOnly)
|
| - return (CPDF_Object*)PDFOBJ_INVALID;
|
| return nullptr;
|
| }
|
|
|
|
|