OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |