OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "parser_int.h" | 7 #include "parser_int.h" |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 #include <utility> | 10 #include <utility> |
(...skipping 2015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2026 if (nextword2 == "R") { | 2026 if (nextword2 == "R") { |
2027 FX_DWORD objnum = FXSYS_atoi(word); | 2027 FX_DWORD objnum = FXSYS_atoi(word); |
2028 if (bTypeOnly) | 2028 if (bTypeOnly) |
2029 return (CPDF_Object*)PDFOBJ_REFERENCE; | 2029 return (CPDF_Object*)PDFOBJ_REFERENCE; |
2030 return new CPDF_Reference(pObjList, objnum); | 2030 return new CPDF_Reference(pObjList, objnum); |
2031 } | 2031 } |
2032 } | 2032 } |
2033 m_Pos = SavedPos; | 2033 m_Pos = SavedPos; |
2034 if (bTypeOnly) | 2034 if (bTypeOnly) |
2035 return (CPDF_Object*)PDFOBJ_NUMBER; | 2035 return (CPDF_Object*)PDFOBJ_NUMBER; |
2036 return CPDF_Number::Create(word); | 2036 return new CPDF_Number(word); |
2037 } | 2037 } |
2038 if (word == "true" || word == "false") { | 2038 if (word == "true" || word == "false") { |
2039 if (bTypeOnly) | 2039 if (bTypeOnly) |
2040 return (CPDF_Object*)PDFOBJ_BOOLEAN; | 2040 return (CPDF_Object*)PDFOBJ_BOOLEAN; |
2041 return CPDF_Boolean::Create(word == "true"); | 2041 return new CPDF_Boolean(word == "true"); |
2042 } | 2042 } |
2043 if (word == "null") { | 2043 if (word == "null") { |
2044 if (bTypeOnly) | 2044 if (bTypeOnly) |
2045 return (CPDF_Object*)PDFOBJ_NULL; | 2045 return (CPDF_Object*)PDFOBJ_NULL; |
2046 return CPDF_Null::Create(); | 2046 return new CPDF_Null; |
2047 } | 2047 } |
2048 if (word == "(") { | 2048 if (word == "(") { |
2049 if (bTypeOnly) | 2049 if (bTypeOnly) |
2050 return (CPDF_Object*)PDFOBJ_STRING; | 2050 return (CPDF_Object*)PDFOBJ_STRING; |
2051 CFX_ByteString str = ReadString(); | 2051 CFX_ByteString str = ReadString(); |
2052 if (m_pCryptoHandler && bDecrypt) { | 2052 if (m_pCryptoHandler && bDecrypt) { |
2053 m_pCryptoHandler->Decrypt(objnum, gennum, str); | 2053 m_pCryptoHandler->Decrypt(objnum, gennum, str); |
2054 } | 2054 } |
2055 return CPDF_String::Create(str, FALSE); | 2055 return new CPDF_String(str, FALSE); |
2056 } | 2056 } |
2057 if (word == "<") { | 2057 if (word == "<") { |
2058 if (bTypeOnly) | 2058 if (bTypeOnly) |
2059 return (CPDF_Object*)PDFOBJ_STRING; | 2059 return (CPDF_Object*)PDFOBJ_STRING; |
2060 CFX_ByteString str = ReadHexString(); | 2060 CFX_ByteString str = ReadHexString(); |
2061 if (m_pCryptoHandler && bDecrypt) { | 2061 if (m_pCryptoHandler && bDecrypt) { |
2062 m_pCryptoHandler->Decrypt(objnum, gennum, str); | 2062 m_pCryptoHandler->Decrypt(objnum, gennum, str); |
2063 } | 2063 } |
2064 return CPDF_String::Create(str, TRUE); | 2064 return new CPDF_String(str, TRUE); |
2065 } | 2065 } |
2066 if (word == "[") { | 2066 if (word == "[") { |
2067 if (bTypeOnly) | 2067 if (bTypeOnly) |
2068 return (CPDF_Object*)PDFOBJ_ARRAY; | 2068 return (CPDF_Object*)PDFOBJ_ARRAY; |
2069 CPDF_Array* pArray = CPDF_Array::Create(); | 2069 CPDF_Array* pArray = new CPDF_Array; |
2070 while (CPDF_Object* pObj = GetObject(pObjList, objnum, gennum)) | 2070 while (CPDF_Object* pObj = GetObject(pObjList, objnum, gennum)) |
2071 pArray->Add(pObj); | 2071 pArray->Add(pObj); |
2072 | 2072 |
2073 return pArray; | 2073 return pArray; |
2074 } | 2074 } |
2075 if (word[0] == '/') { | 2075 if (word[0] == '/') { |
2076 if (bTypeOnly) | 2076 if (bTypeOnly) |
2077 return (CPDF_Object*)PDFOBJ_NAME; | 2077 return (CPDF_Object*)PDFOBJ_NAME; |
2078 return CPDF_Name::Create( | 2078 return new CPDF_Name( |
2079 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1))); | 2079 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1))); |
2080 } | 2080 } |
2081 if (word == "<<") { | 2081 if (word == "<<") { |
2082 if (bTypeOnly) | 2082 if (bTypeOnly) |
2083 return (CPDF_Object*)PDFOBJ_DICTIONARY; | 2083 return (CPDF_Object*)PDFOBJ_DICTIONARY; |
2084 | 2084 |
2085 if (pContext) | 2085 if (pContext) |
2086 pContext->m_DictStart = SavedPos; | 2086 pContext->m_DictStart = SavedPos; |
2087 | 2087 |
2088 int32_t nKeys = 0; | 2088 int32_t nKeys = 0; |
2089 FX_FILESIZE dwSignValuePos = 0; | 2089 FX_FILESIZE dwSignValuePos = 0; |
2090 nonstd::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> pDict( | 2090 nonstd::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> pDict( |
2091 CPDF_Dictionary::Create()); | 2091 new CPDF_Dictionary); |
2092 while (1) { | 2092 while (1) { |
2093 FX_BOOL bIsNumber; | 2093 FX_BOOL bIsNumber; |
2094 CFX_ByteString key = GetNextWord(bIsNumber); | 2094 CFX_ByteString key = GetNextWord(bIsNumber); |
2095 if (key.IsEmpty()) | 2095 if (key.IsEmpty()) |
2096 return nullptr; | 2096 return nullptr; |
2097 | 2097 |
2098 FX_FILESIZE SavedPos = m_Pos - key.GetLength(); | 2098 FX_FILESIZE SavedPos = m_Pos - key.GetLength(); |
2099 if (key == ">>") | 2099 if (key == ">>") |
2100 break; | 2100 break; |
2101 | 2101 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2187 if (nextword2 == "R") { | 2187 if (nextword2 == "R") { |
2188 if (bTypeOnly) | 2188 if (bTypeOnly) |
2189 return (CPDF_Object*)PDFOBJ_REFERENCE; | 2189 return (CPDF_Object*)PDFOBJ_REFERENCE; |
2190 FX_DWORD objnum = FXSYS_atoi(word); | 2190 FX_DWORD objnum = FXSYS_atoi(word); |
2191 return new CPDF_Reference(pObjList, objnum); | 2191 return new CPDF_Reference(pObjList, objnum); |
2192 } | 2192 } |
2193 } | 2193 } |
2194 m_Pos = SavedPos; | 2194 m_Pos = SavedPos; |
2195 if (bTypeOnly) | 2195 if (bTypeOnly) |
2196 return (CPDF_Object*)PDFOBJ_NUMBER; | 2196 return (CPDF_Object*)PDFOBJ_NUMBER; |
2197 return CPDF_Number::Create(word); | 2197 return new CPDF_Number(word); |
2198 } | 2198 } |
2199 if (word == "true" || word == "false") { | 2199 if (word == "true" || word == "false") { |
2200 if (bTypeOnly) | 2200 if (bTypeOnly) |
2201 return (CPDF_Object*)PDFOBJ_BOOLEAN; | 2201 return (CPDF_Object*)PDFOBJ_BOOLEAN; |
2202 return CPDF_Boolean::Create(word == "true"); | 2202 return new CPDF_Boolean(word == "true"); |
2203 } | 2203 } |
2204 if (word == "null") { | 2204 if (word == "null") { |
2205 if (bTypeOnly) | 2205 if (bTypeOnly) |
2206 return (CPDF_Object*)PDFOBJ_NULL; | 2206 return (CPDF_Object*)PDFOBJ_NULL; |
2207 return CPDF_Null::Create(); | 2207 return new CPDF_Null; |
2208 } | 2208 } |
2209 if (word == "(") { | 2209 if (word == "(") { |
2210 if (bTypeOnly) | 2210 if (bTypeOnly) |
2211 return (CPDF_Object*)PDFOBJ_STRING; | 2211 return (CPDF_Object*)PDFOBJ_STRING; |
2212 CFX_ByteString str = ReadString(); | 2212 CFX_ByteString str = ReadString(); |
2213 if (m_pCryptoHandler) | 2213 if (m_pCryptoHandler) |
2214 m_pCryptoHandler->Decrypt(objnum, gennum, str); | 2214 m_pCryptoHandler->Decrypt(objnum, gennum, str); |
2215 return CPDF_String::Create(str, FALSE); | 2215 return new CPDF_String(str, FALSE); |
2216 } | 2216 } |
2217 if (word == "<") { | 2217 if (word == "<") { |
2218 if (bTypeOnly) | 2218 if (bTypeOnly) |
2219 return (CPDF_Object*)PDFOBJ_STRING; | 2219 return (CPDF_Object*)PDFOBJ_STRING; |
2220 CFX_ByteString str = ReadHexString(); | 2220 CFX_ByteString str = ReadHexString(); |
2221 if (m_pCryptoHandler) | 2221 if (m_pCryptoHandler) |
2222 m_pCryptoHandler->Decrypt(objnum, gennum, str); | 2222 m_pCryptoHandler->Decrypt(objnum, gennum, str); |
2223 return CPDF_String::Create(str, TRUE); | 2223 return new CPDF_String(str, TRUE); |
2224 } | 2224 } |
2225 if (word == "[") { | 2225 if (word == "[") { |
2226 if (bTypeOnly) | 2226 if (bTypeOnly) |
2227 return (CPDF_Object*)PDFOBJ_ARRAY; | 2227 return (CPDF_Object*)PDFOBJ_ARRAY; |
2228 nonstd::unique_ptr<CPDF_Array, ReleaseDeleter<CPDF_Array>> pArray( | 2228 nonstd::unique_ptr<CPDF_Array, ReleaseDeleter<CPDF_Array>> pArray( |
2229 CPDF_Array::Create()); | 2229 new CPDF_Array); |
2230 while (CPDF_Object* pObj = GetObject(pObjList, objnum, gennum)) | 2230 while (CPDF_Object* pObj = GetObject(pObjList, objnum, gennum)) |
2231 pArray->Add(pObj); | 2231 pArray->Add(pObj); |
2232 return m_WordBuffer[0] == ']' ? pArray.release() : nullptr; | 2232 return m_WordBuffer[0] == ']' ? pArray.release() : nullptr; |
2233 } | 2233 } |
2234 if (word[0] == '/') { | 2234 if (word[0] == '/') { |
2235 if (bTypeOnly) | 2235 if (bTypeOnly) |
2236 return (CPDF_Object*)PDFOBJ_NAME; | 2236 return (CPDF_Object*)PDFOBJ_NAME; |
2237 return CPDF_Name::Create( | 2237 return new CPDF_Name( |
2238 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1))); | 2238 PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1))); |
2239 } | 2239 } |
2240 if (word == "<<") { | 2240 if (word == "<<") { |
2241 if (bTypeOnly) | 2241 if (bTypeOnly) |
2242 return (CPDF_Object*)PDFOBJ_DICTIONARY; | 2242 return (CPDF_Object*)PDFOBJ_DICTIONARY; |
2243 if (pContext) | 2243 if (pContext) |
2244 pContext->m_DictStart = SavedPos; | 2244 pContext->m_DictStart = SavedPos; |
2245 | 2245 |
2246 nonstd::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> pDict( | 2246 nonstd::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> pDict( |
2247 CPDF_Dictionary::Create()); | 2247 new CPDF_Dictionary); |
2248 while (1) { | 2248 while (1) { |
2249 FX_BOOL bIsNumber; | 2249 FX_BOOL bIsNumber; |
2250 FX_FILESIZE SavedPos = m_Pos; | 2250 FX_FILESIZE SavedPos = m_Pos; |
2251 CFX_ByteString key = GetNextWord(bIsNumber); | 2251 CFX_ByteString key = GetNextWord(bIsNumber); |
2252 if (key.IsEmpty()) | 2252 if (key.IsEmpty()) |
2253 return nullptr; | 2253 return nullptr; |
2254 | 2254 |
2255 if (key == ">>") | 2255 if (key == ">>") |
2256 break; | 2256 break; |
2257 | 2257 |
(...skipping 2726 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4984 if (!m_pLinearizedDict) | 4984 if (!m_pLinearizedDict) |
4985 return -1; | 4985 return -1; |
4986 CPDF_Array* pRange = m_pLinearizedDict->GetArray("H"); | 4986 CPDF_Array* pRange = m_pLinearizedDict->GetArray("H"); |
4987 if (!pRange) | 4987 if (!pRange) |
4988 return -1; | 4988 return -1; |
4989 CPDF_Object* pStreamLen = pRange->GetElementValue(1); | 4989 CPDF_Object* pStreamLen = pRange->GetElementValue(1); |
4990 if (!pStreamLen) | 4990 if (!pStreamLen) |
4991 return -1; | 4991 return -1; |
4992 return pStreamLen->GetInteger(); | 4992 return pStreamLen->GetInteger(); |
4993 } | 4993 } |
OLD | NEW |