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/include/fpdfapi/cpdf_parser.h" | 7 #include "core/include/fpdfapi/cpdf_parser.h" |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "core/include/fpdfapi/cpdf_document.h" | 11 #include "core/include/fpdfapi/cpdf_document.h" |
12 #include "core/include/fpdfapi/fpdf_parser.h" | 12 #include "core/include/fpdfapi/fpdf_parser.h" |
| 13 #include "core/include/fpdfapi/ipdf_crypto_handler.h" |
13 #include "core/include/fxcrt/fx_ext.h" | 14 #include "core/include/fxcrt/fx_ext.h" |
14 #include "core/include/fxcrt/fx_safe_types.h" | 15 #include "core/include/fxcrt/fx_safe_types.h" |
15 #include "core/src/fpdfapi/fpdf_parser/cpdf_standard_security_handler.h" | 16 #include "core/src/fpdfapi/fpdf_parser/cpdf_standard_security_handler.h" |
16 #include "core/src/fpdfapi/fpdf_parser/cpdf_syntax_parser.h" | 17 #include "core/src/fpdfapi/fpdf_parser/cpdf_syntax_parser.h" |
17 #include "core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.h" | 18 #include "core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.h" |
18 #include "third_party/base/stl_util.h" | 19 #include "third_party/base/stl_util.h" |
19 | 20 |
20 namespace { | 21 namespace { |
21 | 22 |
22 // A limit on the size of the xref table. Theoretical limits are higher, but | 23 // A limit on the size of the xref table. Theoretical limits are higher, but |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 | 88 |
88 bool CPDF_Parser::IsObjectFreeOrNull(FX_DWORD objnum) const { | 89 bool CPDF_Parser::IsObjectFreeOrNull(FX_DWORD objnum) const { |
89 uint8_t type = GetObjectType(objnum); | 90 uint8_t type = GetObjectType(objnum); |
90 return type == 0 || type == 255; | 91 return type == 0 || type == 255; |
91 } | 92 } |
92 | 93 |
93 void CPDF_Parser::SetEncryptDictionary(CPDF_Dictionary* pDict) { | 94 void CPDF_Parser::SetEncryptDictionary(CPDF_Dictionary* pDict) { |
94 m_pEncryptDict = pDict; | 95 m_pEncryptDict = pDict; |
95 } | 96 } |
96 | 97 |
97 CPDF_CryptoHandler* CPDF_Parser::GetCryptoHandler() { | 98 IPDF_CryptoHandler* CPDF_Parser::GetCryptoHandler() { |
98 return m_pSyntax->m_pCryptoHandler.get(); | 99 return m_pSyntax->m_pCryptoHandler.get(); |
99 } | 100 } |
100 | 101 |
101 IFX_FileRead* CPDF_Parser::GetFileAccess() const { | 102 IFX_FileRead* CPDF_Parser::GetFileAccess() const { |
102 return m_pSyntax->m_pFileAccess; | 103 return m_pSyntax->m_pFileAccess; |
103 } | 104 } |
104 | 105 |
105 void CPDF_Parser::ShrinkObjectMap(FX_DWORD objnum) { | 106 void CPDF_Parser::ShrinkObjectMap(FX_DWORD objnum) { |
106 if (objnum == 0) { | 107 if (objnum == 0) { |
107 m_ObjectInfo.clear(); | 108 m_ObjectInfo.clear(); |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 pSecurityHandler.reset(new CPDF_StandardSecurityHandler); | 275 pSecurityHandler.reset(new CPDF_StandardSecurityHandler); |
275 err = PASSWORD_ERROR; | 276 err = PASSWORD_ERROR; |
276 } | 277 } |
277 if (!pSecurityHandler) | 278 if (!pSecurityHandler) |
278 return HANDLER_ERROR; | 279 return HANDLER_ERROR; |
279 | 280 |
280 if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) | 281 if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) |
281 return err; | 282 return err; |
282 | 283 |
283 m_pSecurityHandler = std::move(pSecurityHandler); | 284 m_pSecurityHandler = std::move(pSecurityHandler); |
284 std::unique_ptr<CPDF_CryptoHandler> pCryptoHandler( | 285 std::unique_ptr<IPDF_CryptoHandler> pCryptoHandler( |
285 m_pSecurityHandler->CreateCryptoHandler()); | 286 m_pSecurityHandler->CreateCryptoHandler()); |
286 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler.get())) | 287 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler.get())) |
287 return HANDLER_ERROR; | 288 return HANDLER_ERROR; |
288 m_pSyntax->SetEncrypt(std::move(pCryptoHandler)); | 289 m_pSyntax->SetEncrypt(std::move(pCryptoHandler)); |
289 } | 290 } |
290 return SUCCESS; | 291 return SUCCESS; |
291 } | 292 } |
292 | 293 |
293 void CPDF_Parser::ReleaseEncryptHandler() { | 294 void CPDF_Parser::ReleaseEncryptHandler() { |
294 m_pSyntax->m_pCryptoHandler.reset(); | 295 m_pSyntax->m_pCryptoHandler.reset(); |
(...skipping 1342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1637 if (!LoadLinearizedAllCrossRefV4(m_LastXRefOffset, m_dwXrefStartObjNum) && | 1638 if (!LoadLinearizedAllCrossRefV4(m_LastXRefOffset, m_dwXrefStartObjNum) && |
1638 !LoadLinearizedAllCrossRefV5(m_LastXRefOffset)) { | 1639 !LoadLinearizedAllCrossRefV5(m_LastXRefOffset)) { |
1639 m_LastXRefOffset = 0; | 1640 m_LastXRefOffset = 0; |
1640 m_pSyntax->m_MetadataObjnum = dwSaveMetadataObjnum; | 1641 m_pSyntax->m_MetadataObjnum = dwSaveMetadataObjnum; |
1641 return FORMAT_ERROR; | 1642 return FORMAT_ERROR; |
1642 } | 1643 } |
1643 | 1644 |
1644 m_pSyntax->m_MetadataObjnum = dwSaveMetadataObjnum; | 1645 m_pSyntax->m_MetadataObjnum = dwSaveMetadataObjnum; |
1645 return SUCCESS; | 1646 return SUCCESS; |
1646 } | 1647 } |
OLD | NEW |