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

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

Issue 1419643005: Merge to XFA: Add type cast definitions for CPDF_Array. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 2 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 <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 1136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 } 1147 }
1148 } 1148 }
1149 } 1149 }
1150 segindex += count; 1150 segindex += count;
1151 } 1151 }
1152 pStream->Release(); 1152 pStream->Release();
1153 return TRUE; 1153 return TRUE;
1154 } 1154 }
1155 CPDF_Array* CPDF_Parser::GetIDArray() { 1155 CPDF_Array* CPDF_Parser::GetIDArray() {
1156 CPDF_Object* pID = m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("ID")) : NULL; 1156 CPDF_Object* pID = m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("ID")) : NULL;
1157 if (pID == NULL) { 1157 if (!pID)
1158 return NULL; 1158 return nullptr;
1159 } 1159
1160 if (pID->GetType() == PDFOBJ_REFERENCE) { 1160 if (pID->GetType() == PDFOBJ_REFERENCE) {
1161 pID = ParseIndirectObject(NULL, ((CPDF_Reference*)pID)->GetRefObjNum()); 1161 pID = ParseIndirectObject(NULL, ((CPDF_Reference*)pID)->GetRefObjNum());
1162 m_pTrailer->SetAt(FX_BSTRC("ID"), pID); 1162 m_pTrailer->SetAt(FX_BSTRC("ID"), pID);
1163 } 1163 }
1164 if (pID == NULL || pID->GetType() != PDFOBJ_ARRAY) { 1164 return ToArray(pID);
1165 return NULL;
1166 }
1167 return (CPDF_Array*)pID;
1168 } 1165 }
1169 FX_DWORD CPDF_Parser::GetRootObjNum() { 1166 FX_DWORD CPDF_Parser::GetRootObjNum() {
1170 CPDF_Object* pRef = 1167 CPDF_Object* pRef =
1171 m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("Root")) : NULL; 1168 m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("Root")) : NULL;
1172 if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) { 1169 if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
1173 return 0; 1170 return 0;
1174 } 1171 }
1175 return ((CPDF_Reference*)pRef)->GetRefObjNum(); 1172 return ((CPDF_Reference*)pRef)->GetRefObjNum();
1176 } 1173 }
1177 FX_DWORD CPDF_Parser::GetInfoObjNum() { 1174 FX_DWORD CPDF_Parser::GetInfoObjNum() {
(...skipping 2295 matching lines...) Expand 10 before | Expand all | Expand 10 after
3473 for (FX_DWORD i = 0; i < iPageObjs; ++i) { 3470 for (FX_DWORD i = 0; i < iPageObjs; ++i) {
3474 FX_DWORD dwPageObjNum = m_PageObjList.GetAt(i); 3471 FX_DWORD dwPageObjNum = m_PageObjList.GetAt(i);
3475 FX_BOOL bExist = FALSE; 3472 FX_BOOL bExist = FALSE;
3476 CPDF_Object* pObj = GetObject(dwPageObjNum, pHints, &bExist); 3473 CPDF_Object* pObj = GetObject(dwPageObjNum, pHints, &bExist);
3477 if (!pObj) { 3474 if (!pObj) {
3478 if (bExist) { 3475 if (bExist) {
3479 UnavailObjList.Add(dwPageObjNum); 3476 UnavailObjList.Add(dwPageObjNum);
3480 } 3477 }
3481 continue; 3478 continue;
3482 } 3479 }
3483 if (pObj->GetType() == PDFOBJ_ARRAY) { 3480 if (pObj->IsArray()) {
3484 CPDF_Array* pArray = pObj->GetArray(); 3481 CPDF_Array* pArray = pObj->GetArray();
3485 if (pArray) { 3482 if (pArray) {
3486 int32_t iSize = pArray->GetCount(); 3483 int32_t iSize = pArray->GetCount();
3487 CPDF_Object* pItem = NULL; 3484 CPDF_Object* pItem = NULL;
3488 for (int32_t j = 0; j < iSize; ++j) { 3485 for (int32_t j = 0; j < iSize; ++j) {
3489 pItem = pArray->GetElement(j); 3486 pItem = pArray->GetElement(j);
3490 if (pItem && pItem->GetType() == PDFOBJ_REFERENCE) { 3487 if (pItem && pItem->GetType() == PDFOBJ_REFERENCE) {
3491 UnavailObjList.Add(((CPDF_Reference*)pItem)->GetRefObjNum()); 3488 UnavailObjList.Add(((CPDF_Reference*)pItem)->GetRefObjNum());
3492 } 3489 }
3493 } 3490 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
3542 CPDF_Object* pKids = pDict ? pDict->GetElement(FX_BSTRC("Kids")) : NULL; 3539 CPDF_Object* pKids = pDict ? pDict->GetElement(FX_BSTRC("Kids")) : NULL;
3543 if (!pKids) { 3540 if (!pKids) {
3544 return TRUE; 3541 return TRUE;
3545 } 3542 }
3546 switch (pKids->GetType()) { 3543 switch (pKids->GetType()) {
3547 case PDFOBJ_REFERENCE: { 3544 case PDFOBJ_REFERENCE: {
3548 CPDF_Reference* pKid = (CPDF_Reference*)pKids; 3545 CPDF_Reference* pKid = (CPDF_Reference*)pKids;
3549 m_PageObjList.Add(pKid->GetRefObjNum()); 3546 m_PageObjList.Add(pKid->GetRefObjNum());
3550 } break; 3547 } break;
3551 case PDFOBJ_ARRAY: { 3548 case PDFOBJ_ARRAY: {
3552 CPDF_Array* pKidsArray = (CPDF_Array*)pKids; 3549 CPDF_Array* pKidsArray = pKids->AsArray();
3553 for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) { 3550 for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) {
3554 CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i); 3551 CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i);
3555 if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) { 3552 if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) {
3556 m_PageObjList.Add(((CPDF_Reference*)pKid)->GetRefObjNum()); 3553 m_PageObjList.Add(((CPDF_Reference*)pKid)->GetRefObjNum());
3557 } 3554 }
3558 } 3555 }
3559 } break; 3556 } break;
3560 default: 3557 default:
3561 m_docStatus = PDF_DATAAVAIL_ERROR; 3558 m_docStatus = PDF_DATAAVAIL_ERROR;
3562 return FALSE; 3559 return FALSE;
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
4115 m_docStatus = PDF_DATAAVAIL_ERROR; 4112 m_docStatus = PDF_DATAAVAIL_ERROR;
4116 return FALSE; 4113 return FALSE;
4117 } 4114 }
4118 if (!pPages) { 4115 if (!pPages) {
4119 if (m_docStatus == PDF_DATAAVAIL_ERROR) { 4116 if (m_docStatus == PDF_DATAAVAIL_ERROR) {
4120 m_docStatus = PDF_DATAAVAIL_ERROR; 4117 m_docStatus = PDF_DATAAVAIL_ERROR;
4121 return FALSE; 4118 return FALSE;
4122 } 4119 }
4123 return FALSE; 4120 return FALSE;
4124 } 4121 }
4125 if (pPages->GetType() != PDFOBJ_ARRAY) { 4122
4123 CPDF_Array* pArray = pPages->AsArray();
4124 if (!pArray) {
4126 pPages->Release(); 4125 pPages->Release();
4127 m_docStatus = PDF_DATAAVAIL_ERROR; 4126 m_docStatus = PDF_DATAAVAIL_ERROR;
4128 return FALSE; 4127 return FALSE;
4129 } 4128 }
4129
4130 pPageNode->m_type = PDF_PAGENODE_PAGES; 4130 pPageNode->m_type = PDF_PAGENODE_PAGES;
4131 CPDF_Array* pArray = (CPDF_Array*)pPages;
4132 for (FX_DWORD i = 0; i < pArray->GetCount(); ++i) { 4131 for (FX_DWORD i = 0; i < pArray->GetCount(); ++i) {
4133 CPDF_Object* pKid = (CPDF_Object*)pArray->GetElement(i); 4132 CPDF_Object* pKid = (CPDF_Object*)pArray->GetElement(i);
4134 if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) { 4133 if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) {
4135 continue; 4134 continue;
4136 } 4135 }
4137 CPDF_PageNode* pNode = new CPDF_PageNode(); 4136 CPDF_PageNode* pNode = new CPDF_PageNode();
4138 pPageNode->m_childNode.Add(pNode); 4137 pPageNode->m_childNode.Add(pNode);
4139 pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum(); 4138 pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum();
4140 } 4139 }
4141 pPages->Release(); 4140 pPages->Release();
4142 return TRUE; 4141 return TRUE;
4143 } 4142 }
4144 FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(FX_DWORD dwPageNo, 4143 FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(FX_DWORD dwPageNo,
4145 CPDF_PageNode* pPageNode, 4144 CPDF_PageNode* pPageNode,
4146 IFX_DownloadHints* pHints) { 4145 IFX_DownloadHints* pHints) {
4147 FX_BOOL bExist = FALSE; 4146 FX_BOOL bExist = FALSE;
4148 CPDF_Object* pPage = GetObject(dwPageNo, pHints, &bExist); 4147 CPDF_Object* pPage = GetObject(dwPageNo, pHints, &bExist);
4149 if (!bExist) { 4148 if (!bExist) {
4150 m_docStatus = PDF_DATAAVAIL_ERROR; 4149 m_docStatus = PDF_DATAAVAIL_ERROR;
4151 return FALSE; 4150 return FALSE;
4152 } 4151 }
4153 if (!pPage) { 4152 if (!pPage) {
4154 if (m_docStatus == PDF_DATAAVAIL_ERROR) { 4153 if (m_docStatus == PDF_DATAAVAIL_ERROR) {
4155 m_docStatus = PDF_DATAAVAIL_ERROR; 4154 m_docStatus = PDF_DATAAVAIL_ERROR;
4156 return FALSE; 4155 return FALSE;
4157 } 4156 }
4158 return FALSE; 4157 return FALSE;
4159 } 4158 }
4160 if (pPage->GetType() == PDFOBJ_ARRAY) { 4159 if (pPage->IsArray()) {
4161 pPageNode->m_dwPageNo = dwPageNo; 4160 pPageNode->m_dwPageNo = dwPageNo;
4162 pPageNode->m_type = PDF_PAGENODE_ARRAY; 4161 pPageNode->m_type = PDF_PAGENODE_ARRAY;
4163 pPage->Release(); 4162 pPage->Release();
4164 return TRUE; 4163 return TRUE;
4165 } 4164 }
4166 if (!pPage->IsDictionary()) { 4165 if (!pPage->IsDictionary()) {
4167 pPage->Release(); 4166 pPage->Release();
4168 m_docStatus = PDF_DATAAVAIL_ERROR; 4167 m_docStatus = PDF_DATAAVAIL_ERROR;
4169 return FALSE; 4168 return FALSE;
4170 } 4169 }
4171 pPageNode->m_dwPageNo = dwPageNo; 4170 pPageNode->m_dwPageNo = dwPageNo;
4172 CPDF_Dictionary* pDict = pPage->GetDict(); 4171 CPDF_Dictionary* pDict = pPage->GetDict();
4173 CFX_ByteString type = pDict->GetString(FX_BSTRC("Type")); 4172 CFX_ByteString type = pDict->GetString(FX_BSTRC("Type"));
4174 if (type == FX_BSTRC("Pages")) { 4173 if (type == FX_BSTRC("Pages")) {
4175 pPageNode->m_type = PDF_PAGENODE_PAGES; 4174 pPageNode->m_type = PDF_PAGENODE_PAGES;
4176 CPDF_Object* pKids = pDict->GetElement(FX_BSTRC("Kids")); 4175 CPDF_Object* pKids = pDict->GetElement(FX_BSTRC("Kids"));
4177 if (!pKids) { 4176 if (!pKids) {
4178 m_docStatus = PDF_DATAAVAIL_PAGE; 4177 m_docStatus = PDF_DATAAVAIL_PAGE;
4179 return TRUE; 4178 return TRUE;
4180 } 4179 }
4181 switch (pKids->GetType()) { 4180 switch (pKids->GetType()) {
4182 case PDFOBJ_REFERENCE: { 4181 case PDFOBJ_REFERENCE: {
4183 CPDF_Reference* pKid = (CPDF_Reference*)pKids; 4182 CPDF_Reference* pKid = (CPDF_Reference*)pKids;
4184 CPDF_PageNode* pNode = new CPDF_PageNode(); 4183 CPDF_PageNode* pNode = new CPDF_PageNode();
4185 pPageNode->m_childNode.Add(pNode); 4184 pPageNode->m_childNode.Add(pNode);
4186 pNode->m_dwPageNo = pKid->GetRefObjNum(); 4185 pNode->m_dwPageNo = pKid->GetRefObjNum();
4187 } break; 4186 } break;
4188 case PDFOBJ_ARRAY: { 4187 case PDFOBJ_ARRAY: {
4189 CPDF_Array* pKidsArray = (CPDF_Array*)pKids; 4188 CPDF_Array* pKidsArray = pKids->AsArray();
4190 for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) { 4189 for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) {
4191 CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i); 4190 CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i);
4192 if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) { 4191 if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) {
4193 continue; 4192 continue;
4194 } 4193 }
4195 CPDF_PageNode* pNode = new CPDF_PageNode(); 4194 CPDF_PageNode* pNode = new CPDF_PageNode();
4196 pPageNode->m_childNode.Add(pNode); 4195 pPageNode->m_childNode.Add(pNode);
4197 pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum(); 4196 pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum();
4198 } 4197 }
4199 } break; 4198 } break;
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
4622 return FALSE; 4621 return FALSE;
4623 } 4622 }
4624 CPDF_PageNode::~CPDF_PageNode() { 4623 CPDF_PageNode::~CPDF_PageNode() {
4625 int32_t iSize = m_childNode.GetSize(); 4624 int32_t iSize = m_childNode.GetSize();
4626 for (int32_t i = 0; i < iSize; ++i) { 4625 for (int32_t i = 0; i < iSize; ++i) {
4627 CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i]; 4626 CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i];
4628 delete pNode; 4627 delete pNode;
4629 } 4628 }
4630 m_childNode.RemoveAll(); 4629 m_childNode.RemoveAll();
4631 } 4630 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698