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

Side by Side Diff: core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp

Issue 1841173002: Rename GetElementValue() to GetDirectObject{By,At}(). (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Fix test name Created 4 years, 8 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
« no previous file with comments | « core/fpdfapi/fpdf_parser/cpdf_array.cpp ('k') | core/fpdfapi/fpdf_parser/cpdf_dictionary.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/ipdf_data_avail.h" 7 #include "core/fpdfapi/fpdf_parser/include/ipdf_data_avail.h"
8 8
9 #include "core/fpdfapi/fpdf_parser/cpdf_data_avail.h" 9 #include "core/fpdfapi/fpdf_parser/cpdf_data_avail.h"
10 #include "core/fpdfapi/fpdf_parser/fpdf_parser_utility.h" 10 #include "core/fpdfapi/fpdf_parser/fpdf_parser_utility.h"
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 for (i = 0; i < obj_array.GetSize(); i++) { 146 for (i = 0; i < obj_array.GetSize(); i++) {
147 CPDF_Object* pObj = obj_array[i]; 147 CPDF_Object* pObj = obj_array[i];
148 if (!pObj) 148 if (!pObj)
149 continue; 149 continue;
150 150
151 int32_t type = pObj->GetType(); 151 int32_t type = pObj->GetType();
152 switch (type) { 152 switch (type) {
153 case CPDF_Object::ARRAY: { 153 case CPDF_Object::ARRAY: {
154 CPDF_Array* pArray = pObj->GetArray(); 154 CPDF_Array* pArray = pObj->GetArray();
155 for (uint32_t k = 0; k < pArray->GetCount(); ++k) 155 for (uint32_t k = 0; k < pArray->GetCount(); ++k)
156 new_obj_array.Add(pArray->GetElement(k)); 156 new_obj_array.Add(pArray->GetObjectAt(k));
157 } break; 157 } break;
158 case CPDF_Object::STREAM: 158 case CPDF_Object::STREAM:
159 pObj = pObj->GetDict(); 159 pObj = pObj->GetDict();
160 case CPDF_Object::DICTIONARY: { 160 case CPDF_Object::DICTIONARY: {
161 CPDF_Dictionary* pDict = pObj->GetDict(); 161 CPDF_Dictionary* pDict = pObj->GetDict();
162 if (pDict && pDict->GetStringBy("Type") == "Page" && !bParsePage) 162 if (pDict && pDict->GetStringBy("Type") == "Page" && !bParsePage)
163 continue; 163 continue;
164 164
165 for (const auto& it : *pDict) { 165 for (const auto& it : *pDict) {
166 const CFX_ByteString& key = it.first; 166 const CFX_ByteString& key = it.first;
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 } 444 }
445 return FALSE; 445 return FALSE;
446 } 446 }
447 447
448 CPDF_Dictionary* pDict = m_pRoot->GetDict(); 448 CPDF_Dictionary* pDict = m_pRoot->GetDict();
449 if (!pDict) { 449 if (!pDict) {
450 m_docStatus = PDF_DATAAVAIL_ERROR; 450 m_docStatus = PDF_DATAAVAIL_ERROR;
451 return FALSE; 451 return FALSE;
452 } 452 }
453 453
454 CPDF_Reference* pRef = ToReference(pDict->GetElement("Pages")); 454 CPDF_Reference* pRef = ToReference(pDict->GetObjectBy("Pages"));
455 if (!pRef) { 455 if (!pRef) {
456 m_docStatus = PDF_DATAAVAIL_ERROR; 456 m_docStatus = PDF_DATAAVAIL_ERROR;
457 return FALSE; 457 return FALSE;
458 } 458 }
459 459
460 m_PagesObjNum = pRef->GetRefObjNum(); 460 m_PagesObjNum = pRef->GetRefObjNum();
461 CPDF_Reference* pAcroFormRef = 461 CPDF_Reference* pAcroFormRef =
462 ToReference(m_pRoot->GetDict()->GetElement("AcroForm")); 462 ToReference(m_pRoot->GetDict()->GetObjectBy("AcroForm"));
463 if (pAcroFormRef) { 463 if (pAcroFormRef) {
464 m_bHaveAcroForm = TRUE; 464 m_bHaveAcroForm = TRUE;
465 m_dwAcroFormObjNum = pAcroFormRef->GetRefObjNum(); 465 m_dwAcroFormObjNum = pAcroFormRef->GetRefObjNum();
466 } 466 }
467 467
468 if (m_dwInfoObjNum) { 468 if (m_dwInfoObjNum) {
469 m_docStatus = PDF_DATAAVAIL_INFO; 469 m_docStatus = PDF_DATAAVAIL_INFO;
470 } else { 470 } else {
471 m_docStatus = 471 m_docStatus =
472 m_bHaveAcroForm ? PDF_DATAAVAIL_ACROFORM : PDF_DATAAVAIL_PAGETREE; 472 m_bHaveAcroForm ? PDF_DATAAVAIL_ACROFORM : PDF_DATAAVAIL_PAGETREE;
473 } 473 }
474 return TRUE; 474 return TRUE;
475 } 475 }
476 476
477 FX_BOOL CPDF_DataAvail::PreparePageItem() { 477 FX_BOOL CPDF_DataAvail::PreparePageItem() {
478 CPDF_Dictionary* pRoot = m_pDocument->GetRoot(); 478 CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
479 CPDF_Reference* pRef = 479 CPDF_Reference* pRef =
480 ToReference(pRoot ? pRoot->GetElement("Pages") : nullptr); 480 ToReference(pRoot ? pRoot->GetObjectBy("Pages") : nullptr);
481 if (!pRef) { 481 if (!pRef) {
482 m_docStatus = PDF_DATAAVAIL_ERROR; 482 m_docStatus = PDF_DATAAVAIL_ERROR;
483 return FALSE; 483 return FALSE;
484 } 484 }
485 485
486 m_PagesObjNum = pRef->GetRefObjNum(); 486 m_PagesObjNum = pRef->GetRefObjNum();
487 m_pCurrentParser = m_pDocument->GetParser(); 487 m_pCurrentParser = m_pDocument->GetParser();
488 m_docStatus = PDF_DATAAVAIL_PAGETREE; 488 m_docStatus = PDF_DATAAVAIL_PAGETREE;
489 return TRUE; 489 return TRUE;
490 } 490 }
(...skipping 17 matching lines...) Expand all
508 if (bExist) 508 if (bExist)
509 UnavailObjList.Add(dwPageObjNum); 509 UnavailObjList.Add(dwPageObjNum);
510 continue; 510 continue;
511 } 511 }
512 512
513 if (pObj->IsArray()) { 513 if (pObj->IsArray()) {
514 CPDF_Array* pArray = pObj->GetArray(); 514 CPDF_Array* pArray = pObj->GetArray();
515 if (pArray) { 515 if (pArray) {
516 int32_t iSize = pArray->GetCount(); 516 int32_t iSize = pArray->GetCount();
517 for (int32_t j = 0; j < iSize; ++j) { 517 for (int32_t j = 0; j < iSize; ++j) {
518 if (CPDF_Reference* pRef = ToReference(pArray->GetElement(j))) 518 if (CPDF_Reference* pRef = ToReference(pArray->GetObjectAt(j)))
519 UnavailObjList.Add(pRef->GetRefObjNum()); 519 UnavailObjList.Add(pRef->GetRefObjNum());
520 } 520 }
521 } 521 }
522 } 522 }
523 523
524 if (!pObj->IsDictionary()) { 524 if (!pObj->IsDictionary()) {
525 pObj->Release(); 525 pObj->Release();
526 continue; 526 continue;
527 } 527 }
528 528
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 return TRUE; 566 return TRUE;
567 } 567 }
568 568
569 FX_BOOL CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) { 569 FX_BOOL CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) {
570 if (!pParser) { 570 if (!pParser) {
571 m_docStatus = PDF_DATAAVAIL_ERROR; 571 m_docStatus = PDF_DATAAVAIL_ERROR;
572 return FALSE; 572 return FALSE;
573 } 573 }
574 574
575 CPDF_Dictionary* pDict = pPages->GetDict(); 575 CPDF_Dictionary* pDict = pPages->GetDict();
576 CPDF_Object* pKids = pDict ? pDict->GetElement("Kids") : NULL; 576 CPDF_Object* pKids = pDict ? pDict->GetObjectBy("Kids") : NULL;
577 if (!pKids) 577 if (!pKids)
578 return TRUE; 578 return TRUE;
579 579
580 switch (pKids->GetType()) { 580 switch (pKids->GetType()) {
581 case CPDF_Object::REFERENCE: 581 case CPDF_Object::REFERENCE:
582 m_PageObjList.Add(pKids->AsReference()->GetRefObjNum()); 582 m_PageObjList.Add(pKids->AsReference()->GetRefObjNum());
583 break; 583 break;
584 case CPDF_Object::ARRAY: { 584 case CPDF_Object::ARRAY: {
585 CPDF_Array* pKidsArray = pKids->AsArray(); 585 CPDF_Array* pKidsArray = pKids->AsArray();
586 for (uint32_t i = 0; i < pKidsArray->GetCount(); ++i) { 586 for (uint32_t i = 0; i < pKidsArray->GetCount(); ++i) {
587 if (CPDF_Reference* pRef = ToReference(pKidsArray->GetElement(i))) 587 if (CPDF_Reference* pRef = ToReference(pKidsArray->GetObjectAt(i)))
588 m_PageObjList.Add(pRef->GetRefObjNum()); 588 m_PageObjList.Add(pRef->GetRefObjNum());
589 } 589 }
590 } break; 590 } break;
591 default: 591 default:
592 m_docStatus = PDF_DATAAVAIL_ERROR; 592 m_docStatus = PDF_DATAAVAIL_ERROR;
593 return FALSE; 593 return FALSE;
594 } 594 }
595 return TRUE; 595 return TRUE;
596 } 596 }
597 597
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 } 640 }
641 return TRUE; 641 return TRUE;
642 } 642 }
643 643
644 pHints->AddSegment(0, req_size); 644 pHints->AddSegment(0, req_size);
645 return FALSE; 645 return FALSE;
646 } 646 }
647 647
648 FX_BOOL CPDF_DataAvail::CheckFirstPage(IPDF_DataAvail::DownloadHints* pHints) { 648 FX_BOOL CPDF_DataAvail::CheckFirstPage(IPDF_DataAvail::DownloadHints* pHints) {
649 CPDF_Dictionary* pDict = m_pLinearized->GetDict(); 649 CPDF_Dictionary* pDict = m_pLinearized->GetDict();
650 CPDF_Object* pEndOffSet = pDict ? pDict->GetElement("E") : NULL; 650 CPDF_Object* pEndOffSet = pDict ? pDict->GetObjectBy("E") : NULL;
651 if (!pEndOffSet) { 651 if (!pEndOffSet) {
652 m_docStatus = PDF_DATAAVAIL_ERROR; 652 m_docStatus = PDF_DATAAVAIL_ERROR;
653 return FALSE; 653 return FALSE;
654 } 654 }
655 655
656 CPDF_Object* pXRefOffset = pDict ? pDict->GetElement("T") : NULL; 656 CPDF_Object* pXRefOffset = pDict ? pDict->GetObjectBy("T") : NULL;
657 if (!pXRefOffset) { 657 if (!pXRefOffset) {
658 m_docStatus = PDF_DATAAVAIL_ERROR; 658 m_docStatus = PDF_DATAAVAIL_ERROR;
659 return FALSE; 659 return FALSE;
660 } 660 }
661 661
662 CPDF_Object* pFileLen = pDict ? pDict->GetElement("L") : NULL; 662 CPDF_Object* pFileLen = pDict ? pDict->GetObjectBy("L") : NULL;
663 if (!pFileLen) { 663 if (!pFileLen) {
664 m_docStatus = PDF_DATAAVAIL_ERROR; 664 m_docStatus = PDF_DATAAVAIL_ERROR;
665 return FALSE; 665 return FALSE;
666 } 666 }
667 667
668 FX_BOOL bNeedDownLoad = FALSE; 668 FX_BOOL bNeedDownLoad = FALSE;
669 if (pEndOffSet->IsNumber()) { 669 if (pEndOffSet->IsNumber()) {
670 uint32_t dwEnd = pEndOffSet->GetInteger(); 670 uint32_t dwEnd = pEndOffSet->GetInteger();
671 dwEnd += 512; 671 dwEnd += 512;
672 if ((FX_FILESIZE)dwEnd > m_dwFileLen) 672 if ((FX_FILESIZE)dwEnd > m_dwFileLen)
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 if (!pDict) { 739 if (!pDict) {
740 m_docStatus = PDF_DATAAVAIL_ERROR; 740 m_docStatus = PDF_DATAAVAIL_ERROR;
741 return FALSE; 741 return FALSE;
742 } 742 }
743 743
744 if (!pDict->KeyExist("H") || !pDict->KeyExist("O") || !pDict->KeyExist("N")) { 744 if (!pDict->KeyExist("H") || !pDict->KeyExist("O") || !pDict->KeyExist("N")) {
745 m_docStatus = PDF_DATAAVAIL_ERROR; 745 m_docStatus = PDF_DATAAVAIL_ERROR;
746 return FALSE; 746 return FALSE;
747 } 747 }
748 748
749 int nPageCount = pDict->GetElementValue("N")->GetInteger(); 749 int nPageCount = pDict->GetDirectObjectBy("N")->GetInteger();
750 if (nPageCount <= 1) { 750 if (nPageCount <= 1) {
751 m_docStatus = PDF_DATAAVAIL_DONE; 751 m_docStatus = PDF_DATAAVAIL_DONE;
752 return TRUE; 752 return TRUE;
753 } 753 }
754 754
755 CPDF_Array* pHintStreamRange = pDict->GetArrayBy("H"); 755 CPDF_Array* pHintStreamRange = pDict->GetArrayBy("H");
756 FX_FILESIZE szHSStart = 756 FX_FILESIZE szHSStart =
757 pHintStreamRange->GetElementValue(0) 757 pHintStreamRange->GetDirectObjectAt(0)
758 ? pHintStreamRange->GetElementValue(0)->GetInteger() 758 ? pHintStreamRange->GetDirectObjectAt(0)->GetInteger()
759 : 0; 759 : 0;
760 FX_FILESIZE szHSLength = 760 FX_FILESIZE szHSLength =
761 pHintStreamRange->GetElementValue(1) 761 pHintStreamRange->GetDirectObjectAt(1)
762 ? pHintStreamRange->GetElementValue(1)->GetInteger() 762 ? pHintStreamRange->GetDirectObjectAt(1)->GetInteger()
763 : 0; 763 : 0;
764 if (szHSStart < 0 || szHSLength <= 0) { 764 if (szHSStart < 0 || szHSLength <= 0) {
765 m_docStatus = PDF_DATAAVAIL_ERROR; 765 m_docStatus = PDF_DATAAVAIL_ERROR;
766 return FALSE; 766 return FALSE;
767 } 767 }
768 768
769 if (!IsDataAvail(szHSStart, szHSLength, pHints)) 769 if (!IsDataAvail(szHSStart, szHSLength, pHints))
770 return FALSE; 770 return FALSE;
771 771
772 m_syntaxParser.InitParser(m_pFileRead, m_dwHeaderOffset); 772 m_syntaxParser.InitParser(m_pFileRead, m_dwHeaderOffset);
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 m_pLinearized->Release(); 857 m_pLinearized->Release();
858 m_pLinearized = nullptr; 858 m_pLinearized = nullptr;
859 } 859 }
860 860
861 m_pLinearized = 861 m_pLinearized =
862 ParseIndirectObjectAt(m_syntaxParser.m_HeaderOffset + 9, objnum); 862 ParseIndirectObjectAt(m_syntaxParser.m_HeaderOffset + 9, objnum);
863 if (!m_pLinearized) 863 if (!m_pLinearized)
864 return FALSE; 864 return FALSE;
865 865
866 CPDF_Dictionary* pDict = m_pLinearized->GetDict(); 866 CPDF_Dictionary* pDict = m_pLinearized->GetDict();
867 if (pDict && pDict->GetElement("Linearized")) { 867 if (pDict && pDict->GetObjectBy("Linearized")) {
868 CPDF_Object* pLen = pDict->GetElement("L"); 868 CPDF_Object* pLen = pDict->GetObjectBy("L");
869 if (!pLen) 869 if (!pLen)
870 return FALSE; 870 return FALSE;
871 871
872 if ((FX_FILESIZE)pLen->GetInteger() != m_pFileRead->GetSize()) 872 if ((FX_FILESIZE)pLen->GetInteger() != m_pFileRead->GetSize())
873 return FALSE; 873 return FALSE;
874 874
875 m_bLinearized = TRUE; 875 m_bLinearized = TRUE;
876 876
877 if (CPDF_Number* pNo = ToNumber(pDict->GetElement("P"))) 877 if (CPDF_Number* pNo = ToNumber(pDict->GetObjectBy("P")))
878 m_dwFirstPageNo = pNo->GetInteger(); 878 m_dwFirstPageNo = pNo->GetInteger();
879 879
880 return TRUE; 880 return TRUE;
881 } 881 }
882 return FALSE; 882 return FALSE;
883 } 883 }
884 884
885 FX_BOOL CPDF_DataAvail::CheckEnd(IPDF_DataAvail::DownloadHints* pHints) { 885 FX_BOOL CPDF_DataAvail::CheckEnd(IPDF_DataAvail::DownloadHints* pHints) {
886 uint32_t req_pos = (uint32_t)(m_dwFileLen > 1024 ? m_dwFileLen - 1024 : 0); 886 uint32_t req_pos = (uint32_t)(m_dwFileLen > 1024 ? m_dwFileLen - 1024 : 0);
887 uint32_t dwSize = (uint32_t)(m_dwFileLen - req_pos); 887 uint32_t dwSize = (uint32_t)(m_dwFileLen - req_pos);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 return -1; 947 return -1;
948 948
949 uint32_t objNum = FXSYS_atoui(objnum); 949 uint32_t objNum = FXSYS_atoui(objnum);
950 CPDF_Object* pObj = m_parser.ParseIndirectObjectAt(nullptr, 0, objNum); 950 CPDF_Object* pObj = m_parser.ParseIndirectObjectAt(nullptr, 0, objNum);
951 if (!pObj) { 951 if (!pObj) {
952 m_Pos += m_parser.m_pSyntax->SavePos(); 952 m_Pos += m_parser.m_pSyntax->SavePos();
953 return 0; 953 return 0;
954 } 954 }
955 955
956 CPDF_Dictionary* pDict = pObj->GetDict(); 956 CPDF_Dictionary* pDict = pObj->GetDict();
957 CPDF_Name* pName = ToName(pDict ? pDict->GetElement("Type") : nullptr); 957 CPDF_Name* pName = ToName(pDict ? pDict->GetObjectBy("Type") : nullptr);
958 if (pName) { 958 if (pName) {
959 if (pName->GetString() == "XRef") { 959 if (pName->GetString() == "XRef") {
960 m_Pos += m_parser.m_pSyntax->SavePos(); 960 m_Pos += m_parser.m_pSyntax->SavePos();
961 xref_offset = pObj->GetDict()->GetIntegerBy("Prev"); 961 xref_offset = pObj->GetDict()->GetIntegerBy("Prev");
962 pObj->Release(); 962 pObj->Release();
963 return 1; 963 return 1;
964 } 964 }
965 } 965 }
966 pObj->Release(); 966 pObj->Release();
967 return -1; 967 return -1;
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1197 if (!pTrailer) { 1197 if (!pTrailer) {
1198 m_Pos += m_syntaxParser.SavePos(); 1198 m_Pos += m_syntaxParser.SavePos();
1199 pHints->AddSegment(m_Pos, iTrailerSize); 1199 pHints->AddSegment(m_Pos, iTrailerSize);
1200 return FALSE; 1200 return FALSE;
1201 } 1201 }
1202 1202
1203 if (!pTrailer->IsDictionary()) 1203 if (!pTrailer->IsDictionary())
1204 return FALSE; 1204 return FALSE;
1205 1205
1206 CPDF_Dictionary* pTrailerDict = pTrailer->GetDict(); 1206 CPDF_Dictionary* pTrailerDict = pTrailer->GetDict();
1207 CPDF_Object* pEncrypt = pTrailerDict->GetElement("Encrypt"); 1207 CPDF_Object* pEncrypt = pTrailerDict->GetObjectBy("Encrypt");
1208 if (ToReference(pEncrypt)) { 1208 if (ToReference(pEncrypt)) {
1209 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; 1209 m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
1210 return TRUE; 1210 return TRUE;
1211 } 1211 }
1212 1212
1213 uint32_t xrefpos = GetDirectInteger(pTrailerDict, "Prev"); 1213 uint32_t xrefpos = GetDirectInteger(pTrailerDict, "Prev");
1214 if (xrefpos) { 1214 if (xrefpos) {
1215 m_dwPrevXRefOffset = GetDirectInteger(pTrailerDict, "XRefStm"); 1215 m_dwPrevXRefOffset = GetDirectInteger(pTrailerDict, "XRefStm");
1216 if (m_dwPrevXRefOffset) { 1216 if (m_dwPrevXRefOffset) {
1217 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; 1217 m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 1279
1280 CPDF_Array* pArray = pPages->AsArray(); 1280 CPDF_Array* pArray = pPages->AsArray();
1281 if (!pArray) { 1281 if (!pArray) {
1282 pPages->Release(); 1282 pPages->Release();
1283 m_docStatus = PDF_DATAAVAIL_ERROR; 1283 m_docStatus = PDF_DATAAVAIL_ERROR;
1284 return FALSE; 1284 return FALSE;
1285 } 1285 }
1286 1286
1287 pPageNode->m_type = PDF_PAGENODE_PAGES; 1287 pPageNode->m_type = PDF_PAGENODE_PAGES;
1288 for (uint32_t i = 0; i < pArray->GetCount(); ++i) { 1288 for (uint32_t i = 0; i < pArray->GetCount(); ++i) {
1289 CPDF_Reference* pKid = ToReference(pArray->GetElement(i)); 1289 CPDF_Reference* pKid = ToReference(pArray->GetObjectAt(i));
1290 if (!pKid) 1290 if (!pKid)
1291 continue; 1291 continue;
1292 1292
1293 PageNode* pNode = new PageNode(); 1293 PageNode* pNode = new PageNode();
1294 pPageNode->m_childNode.Add(pNode); 1294 pPageNode->m_childNode.Add(pNode);
1295 pNode->m_dwPageNo = pKid->GetRefObjNum(); 1295 pNode->m_dwPageNo = pKid->GetRefObjNum();
1296 } 1296 }
1297 pPages->Release(); 1297 pPages->Release();
1298 return TRUE; 1298 return TRUE;
1299 } 1299 }
(...skipping 26 matching lines...) Expand all
1326 pPage->Release(); 1326 pPage->Release();
1327 m_docStatus = PDF_DATAAVAIL_ERROR; 1327 m_docStatus = PDF_DATAAVAIL_ERROR;
1328 return FALSE; 1328 return FALSE;
1329 } 1329 }
1330 1330
1331 pPageNode->m_dwPageNo = dwPageNo; 1331 pPageNode->m_dwPageNo = dwPageNo;
1332 CPDF_Dictionary* pDict = pPage->GetDict(); 1332 CPDF_Dictionary* pDict = pPage->GetDict();
1333 CFX_ByteString type = pDict->GetStringBy("Type"); 1333 CFX_ByteString type = pDict->GetStringBy("Type");
1334 if (type == "Pages") { 1334 if (type == "Pages") {
1335 pPageNode->m_type = PDF_PAGENODE_PAGES; 1335 pPageNode->m_type = PDF_PAGENODE_PAGES;
1336 CPDF_Object* pKids = pDict->GetElement("Kids"); 1336 CPDF_Object* pKids = pDict->GetObjectBy("Kids");
1337 if (!pKids) { 1337 if (!pKids) {
1338 m_docStatus = PDF_DATAAVAIL_PAGE; 1338 m_docStatus = PDF_DATAAVAIL_PAGE;
1339 return TRUE; 1339 return TRUE;
1340 } 1340 }
1341 1341
1342 switch (pKids->GetType()) { 1342 switch (pKids->GetType()) {
1343 case CPDF_Object::REFERENCE: { 1343 case CPDF_Object::REFERENCE: {
1344 CPDF_Reference* pKid = pKids->AsReference(); 1344 CPDF_Reference* pKid = pKids->AsReference();
1345 PageNode* pNode = new PageNode(); 1345 PageNode* pNode = new PageNode();
1346 pPageNode->m_childNode.Add(pNode); 1346 pPageNode->m_childNode.Add(pNode);
1347 pNode->m_dwPageNo = pKid->GetRefObjNum(); 1347 pNode->m_dwPageNo = pKid->GetRefObjNum();
1348 } break; 1348 } break;
1349 case CPDF_Object::ARRAY: { 1349 case CPDF_Object::ARRAY: {
1350 CPDF_Array* pKidsArray = pKids->AsArray(); 1350 CPDF_Array* pKidsArray = pKids->AsArray();
1351 for (uint32_t i = 0; i < pKidsArray->GetCount(); ++i) { 1351 for (uint32_t i = 0; i < pKidsArray->GetCount(); ++i) {
1352 CPDF_Reference* pKid = ToReference(pKidsArray->GetElement(i)); 1352 CPDF_Reference* pKid = ToReference(pKidsArray->GetObjectAt(i));
1353 if (!pKid) 1353 if (!pKid)
1354 continue; 1354 continue;
1355 1355
1356 PageNode* pNode = new PageNode(); 1356 PageNode* pNode = new PageNode();
1357 pPageNode->m_childNode.Add(pNode); 1357 pPageNode->m_childNode.Add(pNode);
1358 pNode->m_dwPageNo = pKid->GetRefObjNum(); 1358 pNode->m_dwPageNo = pKid->GetRefObjNum();
1359 } 1359 }
1360 } break; 1360 } break;
1361 default: 1361 default:
1362 break; 1362 break;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 FX_BOOL CPDF_DataAvail::CheckPageAnnots(int32_t iPage, 1537 FX_BOOL CPDF_DataAvail::CheckPageAnnots(int32_t iPage,
1538 IPDF_DataAvail::DownloadHints* pHints) { 1538 IPDF_DataAvail::DownloadHints* pHints) {
1539 if (!m_objs_array.GetSize()) { 1539 if (!m_objs_array.GetSize()) {
1540 m_objs_array.RemoveAll(); 1540 m_objs_array.RemoveAll();
1541 m_ObjectSet.clear(); 1541 m_ObjectSet.clear();
1542 1542
1543 CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iPage); 1543 CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iPage);
1544 if (!pPageDict) 1544 if (!pPageDict)
1545 return TRUE; 1545 return TRUE;
1546 1546
1547 CPDF_Object* pAnnots = pPageDict->GetElement("Annots"); 1547 CPDF_Object* pAnnots = pPageDict->GetObjectBy("Annots");
1548 if (!pAnnots) 1548 if (!pAnnots)
1549 return TRUE; 1549 return TRUE;
1550 1550
1551 CFX_ArrayTemplate<CPDF_Object*> obj_array; 1551 CFX_ArrayTemplate<CPDF_Object*> obj_array;
1552 obj_array.Add(pAnnots); 1552 obj_array.Add(pAnnots);
1553 1553
1554 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array); 1554 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array);
1555 if (bRet) 1555 if (bRet)
1556 m_objs_array.RemoveAll(); 1556 m_objs_array.RemoveAll();
1557 1557
(...skipping 22 matching lines...) Expand all
1580 if (nRet == DataAvailable) 1580 if (nRet == DataAvailable)
1581 m_bPageLoadedOK = FALSE; 1581 m_bPageLoadedOK = FALSE;
1582 return nRet; 1582 return nRet;
1583 } 1583 }
1584 1584
1585 FX_BOOL CPDF_DataAvail::HaveResourceAncestor(CPDF_Dictionary* pDict) { 1585 FX_BOOL CPDF_DataAvail::HaveResourceAncestor(CPDF_Dictionary* pDict) {
1586 CFX_AutoRestorer<int> restorer(&s_CurrentDataAvailRecursionDepth); 1586 CFX_AutoRestorer<int> restorer(&s_CurrentDataAvailRecursionDepth);
1587 if (++s_CurrentDataAvailRecursionDepth > kMaxDataAvailRecursionDepth) 1587 if (++s_CurrentDataAvailRecursionDepth > kMaxDataAvailRecursionDepth)
1588 return FALSE; 1588 return FALSE;
1589 1589
1590 CPDF_Object* pParent = pDict->GetElement("Parent"); 1590 CPDF_Object* pParent = pDict->GetObjectBy("Parent");
1591 if (!pParent) 1591 if (!pParent)
1592 return FALSE; 1592 return FALSE;
1593 1593
1594 CPDF_Dictionary* pParentDict = pParent->GetDict(); 1594 CPDF_Dictionary* pParentDict = pParent->GetDict();
1595 if (!pParentDict) 1595 if (!pParentDict)
1596 return FALSE; 1596 return FALSE;
1597 1597
1598 CPDF_Object* pRet = pParentDict->GetElement("Resources"); 1598 CPDF_Object* pRet = pParentDict->GetObjectBy("Resources");
1599 if (pRet) { 1599 if (pRet) {
1600 m_pPageResource = pRet; 1600 m_pPageResource = pRet;
1601 return TRUE; 1601 return TRUE;
1602 } 1602 }
1603 1603
1604 return HaveResourceAncestor(pParentDict); 1604 return HaveResourceAncestor(pParentDict);
1605 } 1605 }
1606 1606
1607 IPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail( 1607 IPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
1608 int32_t iPage, 1608 int32_t iPage,
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1702 m_bPageLoadedOK = TRUE; 1702 m_bPageLoadedOK = TRUE;
1703 } 1703 }
1704 1704
1705 if (!m_bAnnotsLoad) { 1705 if (!m_bAnnotsLoad) {
1706 if (!CheckPageAnnots(iPage, pHints)) 1706 if (!CheckPageAnnots(iPage, pHints))
1707 return DataNotAvailable; 1707 return DataNotAvailable;
1708 m_bAnnotsLoad = TRUE; 1708 m_bAnnotsLoad = TRUE;
1709 } 1709 }
1710 1710
1711 if (m_pPageDict && !m_bNeedDownLoadResource) { 1711 if (m_pPageDict && !m_bNeedDownLoadResource) {
1712 m_pPageResource = m_pPageDict->GetElement("Resources"); 1712 m_pPageResource = m_pPageDict->GetObjectBy("Resources");
1713 if (!m_pPageResource) 1713 if (!m_pPageResource)
1714 m_bNeedDownLoadResource = HaveResourceAncestor(m_pPageDict); 1714 m_bNeedDownLoadResource = HaveResourceAncestor(m_pPageDict);
1715 else 1715 else
1716 m_bNeedDownLoadResource = TRUE; 1716 m_bNeedDownLoadResource = TRUE;
1717 } 1717 }
1718 1718
1719 if (m_bNeedDownLoadResource) { 1719 if (m_bNeedDownLoadResource) {
1720 FX_BOOL bRet = CheckResources(pHints); 1720 FX_BOOL bRet = CheckResources(pHints);
1721 if (!bRet) 1721 if (!bRet)
1722 return DataNotAvailable; 1722 return DataNotAvailable;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1756 uint32_t* pSize) { 1756 uint32_t* pSize) {
1757 if (pPos) 1757 if (pPos)
1758 *pPos = m_dwLastXRefOffset; 1758 *pPos = m_dwLastXRefOffset;
1759 if (pSize) 1759 if (pSize)
1760 *pSize = (uint32_t)(m_dwFileLen - m_dwLastXRefOffset); 1760 *pSize = (uint32_t)(m_dwFileLen - m_dwLastXRefOffset);
1761 } 1761 }
1762 1762
1763 int CPDF_DataAvail::GetPageCount() const { 1763 int CPDF_DataAvail::GetPageCount() const {
1764 if (m_pLinearized) { 1764 if (m_pLinearized) {
1765 CPDF_Dictionary* pDict = m_pLinearized->GetDict(); 1765 CPDF_Dictionary* pDict = m_pLinearized->GetDict();
1766 CPDF_Object* pObj = pDict ? pDict->GetElementValue("N") : nullptr; 1766 CPDF_Object* pObj = pDict ? pDict->GetDirectObjectBy("N") : nullptr;
1767 return pObj ? pObj->GetInteger() : 0; 1767 return pObj ? pObj->GetInteger() : 0;
1768 } 1768 }
1769 return m_pDocument ? m_pDocument->GetPageCount() : 0; 1769 return m_pDocument ? m_pDocument->GetPageCount() : 0;
1770 } 1770 }
1771 1771
1772 CPDF_Dictionary* CPDF_DataAvail::GetPage(int index) { 1772 CPDF_Dictionary* CPDF_DataAvail::GetPage(int index) {
1773 if (!m_pDocument || index < 0 || index >= GetPageCount()) 1773 if (!m_pDocument || index < 0 || index >= GetPageCount())
1774 return nullptr; 1774 return nullptr;
1775 1775
1776 if (m_pLinearized) { 1776 if (m_pLinearized) {
1777 CPDF_Dictionary* pDict = m_pLinearized->GetDict(); 1777 CPDF_Dictionary* pDict = m_pLinearized->GetDict();
1778 CPDF_Object* pObj = pDict ? pDict->GetElementValue("P") : nullptr; 1778 CPDF_Object* pObj = pDict ? pDict->GetDirectObjectBy("P") : nullptr;
1779 1779
1780 int pageNum = pObj ? pObj->GetInteger() : 0; 1780 int pageNum = pObj ? pObj->GetInteger() : 0;
1781 if (m_pHintTables && index != pageNum) { 1781 if (m_pHintTables && index != pageNum) {
1782 FX_FILESIZE szPageStartPos = 0; 1782 FX_FILESIZE szPageStartPos = 0;
1783 FX_FILESIZE szPageLength = 0; 1783 FX_FILESIZE szPageLength = 0;
1784 uint32_t dwObjNum = 0; 1784 uint32_t dwObjNum = 0;
1785 FX_BOOL bPagePosGot = m_pHintTables->GetPagePos(index, szPageStartPos, 1785 FX_BOOL bPagePosGot = m_pHintTables->GetPagePos(index, szPageStartPos,
1786 szPageLength, dwObjNum); 1786 szPageLength, dwObjNum);
1787 if (!bPagePosGot) 1787 if (!bPagePosGot)
1788 return nullptr; 1788 return nullptr;
(...skipping 14 matching lines...) Expand all
1803 IPDF_DataAvail::DocFormStatus CPDF_DataAvail::IsFormAvail( 1803 IPDF_DataAvail::DocFormStatus CPDF_DataAvail::IsFormAvail(
1804 IPDF_DataAvail::DownloadHints* pHints) { 1804 IPDF_DataAvail::DownloadHints* pHints) {
1805 if (!m_pDocument) 1805 if (!m_pDocument)
1806 return FormAvailable; 1806 return FormAvailable;
1807 1807
1808 if (!m_bLinearizedFormParamLoad) { 1808 if (!m_bLinearizedFormParamLoad) {
1809 CPDF_Dictionary* pRoot = m_pDocument->GetRoot(); 1809 CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
1810 if (!pRoot) 1810 if (!pRoot)
1811 return FormAvailable; 1811 return FormAvailable;
1812 1812
1813 CPDF_Object* pAcroForm = pRoot->GetElement("AcroForm"); 1813 CPDF_Object* pAcroForm = pRoot->GetObjectBy("AcroForm");
1814 if (!pAcroForm) 1814 if (!pAcroForm)
1815 return FormNotExist; 1815 return FormNotExist;
1816 1816
1817 DocAvailStatus nDocStatus = CheckLinearizedData(pHints); 1817 DocAvailStatus nDocStatus = CheckLinearizedData(pHints);
1818 if (nDocStatus == DataError) 1818 if (nDocStatus == DataError)
1819 return FormError; 1819 return FormError;
1820 if (nDocStatus == DataNotAvailable) 1820 if (nDocStatus == DataNotAvailable)
1821 return FormNotAvailable; 1821 return FormNotAvailable;
1822 1822
1823 if (!m_objs_array.GetSize()) 1823 if (!m_objs_array.GetSize())
(...skipping 11 matching lines...) Expand all
1835 return FormAvailable; 1835 return FormAvailable;
1836 } 1836 }
1837 1837
1838 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} 1838 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {}
1839 1839
1840 CPDF_DataAvail::PageNode::~PageNode() { 1840 CPDF_DataAvail::PageNode::~PageNode() {
1841 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) 1841 for (int32_t i = 0; i < m_childNode.GetSize(); ++i)
1842 delete m_childNode[i]; 1842 delete m_childNode[i];
1843 m_childNode.RemoveAll(); 1843 m_childNode.RemoveAll();
1844 } 1844 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_parser/cpdf_array.cpp ('k') | core/fpdfapi/fpdf_parser/cpdf_dictionary.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698