Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp

Issue 1194933003: Make CPDF_Object::GetString() a virtual method. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: rebase Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "../../../include/fpdfapi/fpdf_module.h" 10 #include "../../../include/fpdfapi/fpdf_module.h"
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 return err; 274 return err;
275 } 275 }
276 CPDF_CryptoHandler* pCryptoHandler = m_pSecurityHandler->CreateCryptoHan dler(); 276 CPDF_CryptoHandler* pCryptoHandler = m_pSecurityHandler->CreateCryptoHan dler();
277 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler)) { 277 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler)) {
278 delete pCryptoHandler; 278 delete pCryptoHandler;
279 pCryptoHandler = NULL; 279 pCryptoHandler = NULL;
280 return PDFPARSE_ERROR_HANDLER; 280 return PDFPARSE_ERROR_HANDLER;
281 } 281 }
282 m_Syntax.SetEncrypt(pCryptoHandler); 282 m_Syntax.SetEncrypt(pCryptoHandler);
283 } else if (m_pEncryptDict) { 283 } else if (m_pEncryptDict) {
284 CFX_ByteString filter = m_pEncryptDict->GetString(FX_BSTRC("Filter")); 284 CFX_ByteString filter = m_pEncryptDict->GetStringAt("Filter");
285 CPDF_SecurityHandler* pSecurityHandler = NULL; 285 CPDF_SecurityHandler* pSecurityHandler = NULL;
286 FX_DWORD err = PDFPARSE_ERROR_HANDLER; 286 FX_DWORD err = PDFPARSE_ERROR_HANDLER;
287 if (filter == FX_BSTRC("Standard")) { 287 if (filter == FX_BSTRC("Standard")) {
288 pSecurityHandler = FPDF_CreateStandardSecurityHandler(); 288 pSecurityHandler = FPDF_CreateStandardSecurityHandler();
289 err = PDFPARSE_ERROR_PASSWORD; 289 err = PDFPARSE_ERROR_PASSWORD;
290 } 290 }
291 if (pSecurityHandler == NULL) { 291 if (pSecurityHandler == NULL) {
292 return PDFPARSE_ERROR_HANDLER; 292 return PDFPARSE_ERROR_HANDLER;
293 } 293 }
294 if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) { 294 if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) {
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 } 780 }
781 FX_FILESIZE obj_end = 0; 781 FX_FILESIZE obj_end = 0;
782 CPDF_Object *pObject = ParseIndirectObjectAtBySt rict(m_pDocument, obj_pos, objnum, NULL, &obj_end); 782 CPDF_Object *pObject = ParseIndirectObjectAtBySt rict(m_pDocument, obj_pos, objnum, NULL, &obj_end);
783 if (pObject) { 783 if (pObject) {
784 int iType = pObject->GetType(); 784 int iType = pObject->GetType();
785 if (iType == PDFOBJ_STREAM) { 785 if (iType == PDFOBJ_STREAM) {
786 CPDF_Stream* pStream = (CPDF_Stream*)pOb ject; 786 CPDF_Stream* pStream = (CPDF_Stream*)pOb ject;
787 CPDF_Dictionary* pDict = pStream->GetDic t(); 787 CPDF_Dictionary* pDict = pStream->GetDic t();
788 if (pDict) { 788 if (pDict) {
789 if (pDict->KeyExist(FX_BSTRC("Type") )) { 789 if (pDict->KeyExist(FX_BSTRC("Type") )) {
790 CFX_ByteString bsValue = pDict-> GetString(FX_BSTRC("Type")); 790 CFX_ByteString bsValue = pDict-> GetStringAt("Type");
791 if (bsValue == FX_BSTRC("XRef") && pDict->KeyExist(FX_BSTRC("Size"))) { 791 if (bsValue == FX_BSTRC("XRef") && pDict->KeyExist(FX_BSTRC("Size"))) {
792 CPDF_Object* pRoot = pDict-> GetElement(FX_BSTRC("Root")); 792 CPDF_Object* pRoot = pDict-> GetElement(FX_BSTRC("Root"));
793 if (pRoot && pRoot->GetDict( ) && pRoot->GetDict()->GetElement(FX_BSTRC("Pages"))) { 793 if (pRoot && pRoot->GetDict( ) && pRoot->GetDict()->GetElement(FX_BSTRC("Pages"))) {
794 if (m_pTrailer) { 794 if (m_pTrailer) {
795 m_pTrailer->Release( ); 795 m_pTrailer->Release( );
796 } 796 }
797 m_pTrailer = (CPDF_Dicti onary*)pDict->Clone(); 797 m_pTrailer = (CPDF_Dicti onary*)pDict->Clone();
798 } 798 }
799 } 799 }
800 } 800 }
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
1457 return NULL; 1457 return NULL;
1458 } 1458 }
1459 return (CPDF_Dictionary*)pObj; 1459 return (CPDF_Dictionary*)pObj;
1460 } 1460 }
1461 FX_DWORD CPDF_Parser::GetPermissions(FX_BOOL bCheckRevision) 1461 FX_DWORD CPDF_Parser::GetPermissions(FX_BOOL bCheckRevision)
1462 { 1462 {
1463 if (m_pSecurityHandler == NULL) { 1463 if (m_pSecurityHandler == NULL) {
1464 return (FX_DWORD) - 1; 1464 return (FX_DWORD) - 1;
1465 } 1465 }
1466 FX_DWORD dwPermission = m_pSecurityHandler->GetPermissions(); 1466 FX_DWORD dwPermission = m_pSecurityHandler->GetPermissions();
1467 if (m_pEncryptDict && m_pEncryptDict->GetString(FX_BSTRC("Filter")) == FX_BS TRC("Standard")) { 1467 if (m_pEncryptDict && m_pEncryptDict->GetStringAt("Filter") == "Standard") {
1468 dwPermission &= 0xFFFFFFFC; 1468 dwPermission &= 0xFFFFFFFC;
1469 dwPermission |= 0xFFFFF0C0; 1469 dwPermission |= 0xFFFFF0C0;
1470 if(bCheckRevision && m_pEncryptDict->GetInteger(FX_BSTRC("R")) == 2) { 1470 if(bCheckRevision && m_pEncryptDict->GetInteger(FX_BSTRC("R")) == 2) {
1471 dwPermission &= 0xFFFFF0FF; 1471 dwPermission &= 0xFFFFF0FF;
1472 } 1472 }
1473 } 1473 }
1474 return dwPermission; 1474 return dwPermission;
1475 } 1475 }
1476 FX_BOOL CPDF_Parser::IsOwner() 1476 FX_BOOL CPDF_Parser::IsOwner()
1477 { 1477 {
(...skipping 1563 matching lines...) Expand 10 before | Expand all | Expand 10 after
3041 CPDF_Array *pArray = pObj->GetArray(); 3041 CPDF_Array *pArray = pObj->GetArray();
3042 for (FX_DWORD k = 0; k < pArray->GetCount(); k++) { 3042 for (FX_DWORD k = 0; k < pArray->GetCount(); k++) {
3043 new_obj_array.Add(pArray->GetElement(k)); 3043 new_obj_array.Add(pArray->GetElement(k));
3044 } 3044 }
3045 } 3045 }
3046 break; 3046 break;
3047 case PDFOBJ_STREAM: 3047 case PDFOBJ_STREAM:
3048 pObj = pObj->GetDict(); 3048 pObj = pObj->GetDict();
3049 case PDFOBJ_DICTIONARY: { 3049 case PDFOBJ_DICTIONARY: {
3050 CPDF_Dictionary *pDict = pObj->GetDict(); 3050 CPDF_Dictionary *pDict = pObj->GetDict();
3051 if (pDict && pDict->GetString("Type") == "Page" && !bParsePa ge) { 3051 if (!bParsePage &&
3052 pDict &&
3053 pDict->GetStringAt("Type") == "Page") {
3052 continue; 3054 continue;
3053 } 3055 }
3054 FX_POSITION pos = pDict->GetStartPos(); 3056 FX_POSITION pos = pDict->GetStartPos();
3055 while (pos) { 3057 while (pos) {
3056 CPDF_Object *value; 3058 CPDF_Object *value;
3057 CFX_ByteString key; 3059 CFX_ByteString key;
3058 value = pDict->GetNextElement(pos, key); 3060 value = pDict->GetNextElement(pos, key);
3059 if (key != "Parent") { 3061 if (key != "Parent") {
3060 new_obj_array.Add(value); 3062 new_obj_array.Add(value);
3061 } 3063 }
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
3472 if (pItem && pItem->GetType() == PDFOBJ_REFERENCE) { 3474 if (pItem && pItem->GetType() == PDFOBJ_REFERENCE) {
3473 UnavailObjList.Add(((CPDF_Reference *)pItem)->GetRefObjN um()); 3475 UnavailObjList.Add(((CPDF_Reference *)pItem)->GetRefObjN um());
3474 } 3476 }
3475 } 3477 }
3476 } 3478 }
3477 } 3479 }
3478 if (pObj->GetType() != PDFOBJ_DICTIONARY) { 3480 if (pObj->GetType() != PDFOBJ_DICTIONARY) {
3479 pObj->Release(); 3481 pObj->Release();
3480 continue; 3482 continue;
3481 } 3483 }
3482 CFX_ByteString type = pObj->GetDict()->GetString(FX_BSTRC("Type")); 3484 CFX_ByteString type = pObj->GetDict()->GetStringAt("Type");
3483 if (type == FX_BSTRC("Pages")) { 3485 if (type == FX_BSTRC("Pages")) {
3484 m_PagesArray.Add(pObj); 3486 m_PagesArray.Add(pObj);
3485 continue; 3487 continue;
3486 } 3488 }
3487 pObj->Release(); 3489 pObj->Release();
3488 } 3490 }
3489 m_PageObjList.RemoveAll(); 3491 m_PageObjList.RemoveAll();
3490 if (UnavailObjList.GetSize()) { 3492 if (UnavailObjList.GetSize()) {
3491 m_PageObjList.Append(UnavailObjList); 3493 m_PageObjList.Append(UnavailObjList);
3492 return FALSE; 3494 return FALSE;
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after
4156 pPage->Release(); 4158 pPage->Release();
4157 return TRUE; 4159 return TRUE;
4158 } 4160 }
4159 if (pPage->GetType() != PDFOBJ_DICTIONARY) { 4161 if (pPage->GetType() != PDFOBJ_DICTIONARY) {
4160 pPage->Release(); 4162 pPage->Release();
4161 m_docStatus = PDF_DATAAVAIL_ERROR; 4163 m_docStatus = PDF_DATAAVAIL_ERROR;
4162 return FALSE; 4164 return FALSE;
4163 } 4165 }
4164 pPageNode->m_dwPageNo = dwPageNo; 4166 pPageNode->m_dwPageNo = dwPageNo;
4165 CPDF_Dictionary* pDict = pPage->GetDict(); 4167 CPDF_Dictionary* pDict = pPage->GetDict();
4166 CFX_ByteString type = pDict ? pDict->GetString(FX_BSTRC("Type")) : CFX_ByteS tring(); 4168 CFX_ByteString type = pDict ? pDict->GetStringAt("Type") : CFX_ByteString();
4167 if (type == FX_BSTRC("Pages")) { 4169 if (type == FX_BSTRC("Pages")) {
4168 pPageNode->m_type = PDF_PAGENODE_PAGES; 4170 pPageNode->m_type = PDF_PAGENODE_PAGES;
4169 CPDF_Object *pKids = pDict->GetElement(FX_BSTRC("Kids")); 4171 CPDF_Object *pKids = pDict->GetElement(FX_BSTRC("Kids"));
4170 if (!pKids) { 4172 if (!pKids) {
4171 m_docStatus = PDF_DATAAVAIL_PAGE; 4173 m_docStatus = PDF_DATAAVAIL_PAGE;
4172 return TRUE; 4174 return TRUE;
4173 } 4175 }
4174 switch (pKids->GetType()) { 4176 switch (pKids->GetType()) {
4175 case PDFOBJ_REFERENCE: { 4177 case PDFOBJ_REFERENCE: {
4176 CPDF_Reference *pKid = (CPDF_Reference *)pKids; 4178 CPDF_Reference *pKid = (CPDF_Reference *)pKids;
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
4632 } 4634 }
4633 CPDF_PageNode::~CPDF_PageNode() 4635 CPDF_PageNode::~CPDF_PageNode()
4634 { 4636 {
4635 int32_t iSize = m_childNode.GetSize(); 4637 int32_t iSize = m_childNode.GetSize();
4636 for (int32_t i = 0; i < iSize; ++i) { 4638 for (int32_t i = 0; i < iSize; ++i) {
4637 CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i]; 4639 CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i];
4638 delete pNode; 4640 delete pNode;
4639 } 4641 }
4640 m_childNode.RemoveAll(); 4642 m_childNode.RemoveAll();
4641 } 4643 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698