| 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 |