OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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 "core/fpdfapi/fpdf_parser/include/cpdf_parser.h" | 7 #include "core/fpdfapi/fpdf_parser/include/cpdf_parser.h" |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 SetEncryptDictionary(nullptr); | 260 SetEncryptDictionary(nullptr); |
261 | 261 |
262 if (!m_pTrailer) | 262 if (!m_pTrailer) |
263 return FORMAT_ERROR; | 263 return FORMAT_ERROR; |
264 | 264 |
265 CPDF_Object* pEncryptObj = m_pTrailer->GetObjectBy("Encrypt"); | 265 CPDF_Object* pEncryptObj = m_pTrailer->GetObjectBy("Encrypt"); |
266 if (pEncryptObj) { | 266 if (pEncryptObj) { |
267 if (CPDF_Dictionary* pEncryptDict = pEncryptObj->AsDictionary()) { | 267 if (CPDF_Dictionary* pEncryptDict = pEncryptObj->AsDictionary()) { |
268 SetEncryptDictionary(pEncryptDict); | 268 SetEncryptDictionary(pEncryptDict); |
269 } else if (CPDF_Reference* pRef = pEncryptObj->AsReference()) { | 269 } else if (CPDF_Reference* pRef = pEncryptObj->AsReference()) { |
270 pEncryptObj = m_pDocument->GetIndirectObject(pRef->GetRefObjNum()); | 270 pEncryptObj = m_pDocument->GetOrParseIndirectObject(pRef->GetRefObjNum()); |
271 if (pEncryptObj) | 271 if (pEncryptObj) |
272 SetEncryptDictionary(pEncryptObj->GetDict()); | 272 SetEncryptDictionary(pEncryptObj->GetDict()); |
273 } | 273 } |
274 } | 274 } |
275 | 275 |
276 if (m_pEncryptDict) { | 276 if (m_pEncryptDict) { |
277 CFX_ByteString filter = m_pEncryptDict->GetStringBy("Filter"); | 277 CFX_ByteString filter = m_pEncryptDict->GetStringBy("Filter"); |
278 std::unique_ptr<CPDF_SecurityHandler> pSecurityHandler; | 278 std::unique_ptr<CPDF_SecurityHandler> pSecurityHandler; |
279 Error err = HANDLER_ERROR; | 279 Error err = HANDLER_ERROR; |
280 if (filter == "Standard") { | 280 if (filter == "Standard") { |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
979 if (!pObject) | 979 if (!pObject) |
980 return FALSE; | 980 return FALSE; |
981 | 981 |
982 if (m_pDocument) { | 982 if (m_pDocument) { |
983 CPDF_Dictionary* pRootDict = m_pDocument->GetRoot(); | 983 CPDF_Dictionary* pRootDict = m_pDocument->GetRoot(); |
984 if (pRootDict && pRootDict->GetObjNum() == pObject->m_ObjNum) { | 984 if (pRootDict && pRootDict->GetObjNum() == pObject->m_ObjNum) { |
985 if (pObject->IsStream()) | 985 if (pObject->IsStream()) |
986 pObject->Release(); | 986 pObject->Release(); |
987 return FALSE; | 987 return FALSE; |
988 } | 988 } |
989 if (!m_pDocument->InsertIndirectObject(pObject->m_ObjNum, pObject)) | 989 if (!m_pDocument->ReplaceIndirectObjectIfHigherGeneration(pObject->m_ObjNum, |
| 990 pObject)) { |
990 return FALSE; | 991 return FALSE; |
| 992 } |
991 } | 993 } |
992 | 994 |
993 CPDF_Stream* pStream = pObject->AsStream(); | 995 CPDF_Stream* pStream = pObject->AsStream(); |
994 if (!pStream) | 996 if (!pStream) |
995 return FALSE; | 997 return FALSE; |
996 | 998 |
997 CPDF_Dictionary* pDict = pStream->GetDict(); | 999 CPDF_Dictionary* pDict = pStream->GetDict(); |
998 *pos = pDict->GetIntegerBy("Prev"); | 1000 *pos = pDict->GetIntegerBy("Prev"); |
999 int32_t size = pDict->GetIntegerBy("Size"); | 1001 int32_t size = pDict->GetIntegerBy("Size"); |
1000 if (size < 0) { | 1002 if (size < 0) { |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1223 } | 1225 } |
1224 | 1226 |
1225 CPDF_StreamAcc* CPDF_Parser::GetObjectStream(uint32_t objnum) { | 1227 CPDF_StreamAcc* CPDF_Parser::GetObjectStream(uint32_t objnum) { |
1226 auto it = m_ObjectStreamMap.find(objnum); | 1228 auto it = m_ObjectStreamMap.find(objnum); |
1227 if (it != m_ObjectStreamMap.end()) | 1229 if (it != m_ObjectStreamMap.end()) |
1228 return it->second.get(); | 1230 return it->second.get(); |
1229 | 1231 |
1230 if (!m_pDocument) | 1232 if (!m_pDocument) |
1231 return nullptr; | 1233 return nullptr; |
1232 | 1234 |
1233 const CPDF_Stream* pStream = ToStream(m_pDocument->GetIndirectObject(objnum)); | 1235 const CPDF_Stream* pStream = |
| 1236 ToStream(m_pDocument->GetOrParseIndirectObject(objnum)); |
1234 if (!pStream) | 1237 if (!pStream) |
1235 return nullptr; | 1238 return nullptr; |
1236 | 1239 |
1237 CPDF_StreamAcc* pStreamAcc = new CPDF_StreamAcc; | 1240 CPDF_StreamAcc* pStreamAcc = new CPDF_StreamAcc; |
1238 pStreamAcc->LoadAllData(pStream); | 1241 pStreamAcc->LoadAllData(pStream); |
1239 m_ObjectStreamMap[objnum].reset(pStreamAcc); | 1242 m_ObjectStreamMap[objnum].reset(pStreamAcc); |
1240 return pStreamAcc; | 1243 return pStreamAcc; |
1241 } | 1244 } |
1242 | 1245 |
1243 FX_FILESIZE CPDF_Parser::GetObjectSize(uint32_t objnum) const { | 1246 FX_FILESIZE CPDF_Parser::GetObjectSize(uint32_t objnum) const { |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1671 if (!LoadLinearizedAllCrossRefV4(m_LastXRefOffset, m_dwXrefStartObjNum) && | 1674 if (!LoadLinearizedAllCrossRefV4(m_LastXRefOffset, m_dwXrefStartObjNum) && |
1672 !LoadLinearizedAllCrossRefV5(m_LastXRefOffset)) { | 1675 !LoadLinearizedAllCrossRefV5(m_LastXRefOffset)) { |
1673 m_LastXRefOffset = 0; | 1676 m_LastXRefOffset = 0; |
1674 m_pSyntax->m_MetadataObjnum = dwSaveMetadataObjnum; | 1677 m_pSyntax->m_MetadataObjnum = dwSaveMetadataObjnum; |
1675 return FORMAT_ERROR; | 1678 return FORMAT_ERROR; |
1676 } | 1679 } |
1677 | 1680 |
1678 m_pSyntax->m_MetadataObjnum = dwSaveMetadataObjnum; | 1681 m_pSyntax->m_MetadataObjnum = dwSaveMetadataObjnum; |
1679 return SUCCESS; | 1682 return SUCCESS; |
1680 } | 1683 } |
OLD | NEW |