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 2289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3467 for (FX_DWORD i = 0; i < iPageObjs; ++i) { | 3464 for (FX_DWORD i = 0; i < iPageObjs; ++i) { |
3468 FX_DWORD dwPageObjNum = m_PageObjList.GetAt(i); | 3465 FX_DWORD dwPageObjNum = m_PageObjList.GetAt(i); |
3469 FX_BOOL bExist = FALSE; | 3466 FX_BOOL bExist = FALSE; |
3470 CPDF_Object* pObj = GetObject(dwPageObjNum, pHints, &bExist); | 3467 CPDF_Object* pObj = GetObject(dwPageObjNum, pHints, &bExist); |
3471 if (!pObj) { | 3468 if (!pObj) { |
3472 if (bExist) { | 3469 if (bExist) { |
3473 UnavailObjList.Add(dwPageObjNum); | 3470 UnavailObjList.Add(dwPageObjNum); |
3474 } | 3471 } |
3475 continue; | 3472 continue; |
3476 } | 3473 } |
3477 if (pObj->GetType() == PDFOBJ_ARRAY) { | 3474 if (pObj->IsArray()) { |
3478 CPDF_Array* pArray = pObj->GetArray(); | 3475 CPDF_Array* pArray = pObj->GetArray(); |
3479 if (pArray) { | 3476 if (pArray) { |
3480 int32_t iSize = pArray->GetCount(); | 3477 int32_t iSize = pArray->GetCount(); |
3481 CPDF_Object* pItem = NULL; | 3478 CPDF_Object* pItem = NULL; |
3482 for (int32_t j = 0; j < iSize; ++j) { | 3479 for (int32_t j = 0; j < iSize; ++j) { |
3483 pItem = pArray->GetElement(j); | 3480 pItem = pArray->GetElement(j); |
3484 if (pItem && pItem->GetType() == PDFOBJ_REFERENCE) { | 3481 if (pItem && pItem->GetType() == PDFOBJ_REFERENCE) { |
3485 UnavailObjList.Add(((CPDF_Reference*)pItem)->GetRefObjNum()); | 3482 UnavailObjList.Add(((CPDF_Reference*)pItem)->GetRefObjNum()); |
3486 } | 3483 } |
3487 } | 3484 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3536 CPDF_Object* pKids = pDict ? pDict->GetElement(FX_BSTRC("Kids")) : NULL; | 3533 CPDF_Object* pKids = pDict ? pDict->GetElement(FX_BSTRC("Kids")) : NULL; |
3537 if (!pKids) { | 3534 if (!pKids) { |
3538 return TRUE; | 3535 return TRUE; |
3539 } | 3536 } |
3540 switch (pKids->GetType()) { | 3537 switch (pKids->GetType()) { |
3541 case PDFOBJ_REFERENCE: { | 3538 case PDFOBJ_REFERENCE: { |
3542 CPDF_Reference* pKid = (CPDF_Reference*)pKids; | 3539 CPDF_Reference* pKid = (CPDF_Reference*)pKids; |
3543 m_PageObjList.Add(pKid->GetRefObjNum()); | 3540 m_PageObjList.Add(pKid->GetRefObjNum()); |
3544 } break; | 3541 } break; |
3545 case PDFOBJ_ARRAY: { | 3542 case PDFOBJ_ARRAY: { |
3546 CPDF_Array* pKidsArray = (CPDF_Array*)pKids; | 3543 CPDF_Array* pKidsArray = pKids->AsArray(); |
3547 for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) { | 3544 for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) { |
3548 CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i); | 3545 CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i); |
3549 if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) { | 3546 if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) { |
3550 m_PageObjList.Add(((CPDF_Reference*)pKid)->GetRefObjNum()); | 3547 m_PageObjList.Add(((CPDF_Reference*)pKid)->GetRefObjNum()); |
3551 } | 3548 } |
3552 } | 3549 } |
3553 } break; | 3550 } break; |
3554 default: | 3551 default: |
3555 m_docStatus = PDF_DATAAVAIL_ERROR; | 3552 m_docStatus = PDF_DATAAVAIL_ERROR; |
3556 return FALSE; | 3553 return FALSE; |
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4109 m_docStatus = PDF_DATAAVAIL_ERROR; | 4106 m_docStatus = PDF_DATAAVAIL_ERROR; |
4110 return FALSE; | 4107 return FALSE; |
4111 } | 4108 } |
4112 if (!pPages) { | 4109 if (!pPages) { |
4113 if (m_docStatus == PDF_DATAAVAIL_ERROR) { | 4110 if (m_docStatus == PDF_DATAAVAIL_ERROR) { |
4114 m_docStatus = PDF_DATAAVAIL_ERROR; | 4111 m_docStatus = PDF_DATAAVAIL_ERROR; |
4115 return FALSE; | 4112 return FALSE; |
4116 } | 4113 } |
4117 return FALSE; | 4114 return FALSE; |
4118 } | 4115 } |
4119 if (pPages->GetType() != PDFOBJ_ARRAY) { | 4116 |
| 4117 CPDF_Array* pArray = pPages->AsArray(); |
| 4118 if (!pArray) { |
4120 pPages->Release(); | 4119 pPages->Release(); |
4121 m_docStatus = PDF_DATAAVAIL_ERROR; | 4120 m_docStatus = PDF_DATAAVAIL_ERROR; |
4122 return FALSE; | 4121 return FALSE; |
4123 } | 4122 } |
| 4123 |
4124 pPageNode->m_type = PDF_PAGENODE_PAGES; | 4124 pPageNode->m_type = PDF_PAGENODE_PAGES; |
4125 CPDF_Array* pArray = (CPDF_Array*)pPages; | |
4126 for (FX_DWORD i = 0; i < pArray->GetCount(); ++i) { | 4125 for (FX_DWORD i = 0; i < pArray->GetCount(); ++i) { |
4127 CPDF_Object* pKid = (CPDF_Object*)pArray->GetElement(i); | 4126 CPDF_Object* pKid = (CPDF_Object*)pArray->GetElement(i); |
4128 if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) { | 4127 if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) { |
4129 continue; | 4128 continue; |
4130 } | 4129 } |
4131 CPDF_PageNode* pNode = new CPDF_PageNode(); | 4130 CPDF_PageNode* pNode = new CPDF_PageNode(); |
4132 pPageNode->m_childNode.Add(pNode); | 4131 pPageNode->m_childNode.Add(pNode); |
4133 pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum(); | 4132 pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum(); |
4134 } | 4133 } |
4135 pPages->Release(); | 4134 pPages->Release(); |
4136 return TRUE; | 4135 return TRUE; |
4137 } | 4136 } |
4138 FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(FX_DWORD dwPageNo, | 4137 FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(FX_DWORD dwPageNo, |
4139 CPDF_PageNode* pPageNode, | 4138 CPDF_PageNode* pPageNode, |
4140 IFX_DownloadHints* pHints) { | 4139 IFX_DownloadHints* pHints) { |
4141 FX_BOOL bExist = FALSE; | 4140 FX_BOOL bExist = FALSE; |
4142 CPDF_Object* pPage = GetObject(dwPageNo, pHints, &bExist); | 4141 CPDF_Object* pPage = GetObject(dwPageNo, pHints, &bExist); |
4143 if (!bExist) { | 4142 if (!bExist) { |
4144 m_docStatus = PDF_DATAAVAIL_ERROR; | 4143 m_docStatus = PDF_DATAAVAIL_ERROR; |
4145 return FALSE; | 4144 return FALSE; |
4146 } | 4145 } |
4147 if (!pPage) { | 4146 if (!pPage) { |
4148 if (m_docStatus == PDF_DATAAVAIL_ERROR) { | 4147 if (m_docStatus == PDF_DATAAVAIL_ERROR) { |
4149 m_docStatus = PDF_DATAAVAIL_ERROR; | 4148 m_docStatus = PDF_DATAAVAIL_ERROR; |
4150 return FALSE; | 4149 return FALSE; |
4151 } | 4150 } |
4152 return FALSE; | 4151 return FALSE; |
4153 } | 4152 } |
4154 if (pPage->GetType() == PDFOBJ_ARRAY) { | 4153 if (pPage->IsArray()) { |
4155 pPageNode->m_dwPageNo = dwPageNo; | 4154 pPageNode->m_dwPageNo = dwPageNo; |
4156 pPageNode->m_type = PDF_PAGENODE_ARRAY; | 4155 pPageNode->m_type = PDF_PAGENODE_ARRAY; |
4157 pPage->Release(); | 4156 pPage->Release(); |
4158 return TRUE; | 4157 return TRUE; |
4159 } | 4158 } |
4160 if (!pPage->IsDictionary()) { | 4159 if (!pPage->IsDictionary()) { |
4161 pPage->Release(); | 4160 pPage->Release(); |
4162 m_docStatus = PDF_DATAAVAIL_ERROR; | 4161 m_docStatus = PDF_DATAAVAIL_ERROR; |
4163 return FALSE; | 4162 return FALSE; |
4164 } | 4163 } |
4165 pPageNode->m_dwPageNo = dwPageNo; | 4164 pPageNode->m_dwPageNo = dwPageNo; |
4166 CPDF_Dictionary* pDict = pPage->GetDict(); | 4165 CPDF_Dictionary* pDict = pPage->GetDict(); |
4167 CFX_ByteString type = pDict->GetString(FX_BSTRC("Type")); | 4166 CFX_ByteString type = pDict->GetString(FX_BSTRC("Type")); |
4168 if (type == FX_BSTRC("Pages")) { | 4167 if (type == FX_BSTRC("Pages")) { |
4169 pPageNode->m_type = PDF_PAGENODE_PAGES; | 4168 pPageNode->m_type = PDF_PAGENODE_PAGES; |
4170 CPDF_Object* pKids = pDict->GetElement(FX_BSTRC("Kids")); | 4169 CPDF_Object* pKids = pDict->GetElement(FX_BSTRC("Kids")); |
4171 if (!pKids) { | 4170 if (!pKids) { |
4172 m_docStatus = PDF_DATAAVAIL_PAGE; | 4171 m_docStatus = PDF_DATAAVAIL_PAGE; |
4173 return TRUE; | 4172 return TRUE; |
4174 } | 4173 } |
4175 switch (pKids->GetType()) { | 4174 switch (pKids->GetType()) { |
4176 case PDFOBJ_REFERENCE: { | 4175 case PDFOBJ_REFERENCE: { |
4177 CPDF_Reference* pKid = (CPDF_Reference*)pKids; | 4176 CPDF_Reference* pKid = (CPDF_Reference*)pKids; |
4178 CPDF_PageNode* pNode = new CPDF_PageNode(); | 4177 CPDF_PageNode* pNode = new CPDF_PageNode(); |
4179 pPageNode->m_childNode.Add(pNode); | 4178 pPageNode->m_childNode.Add(pNode); |
4180 pNode->m_dwPageNo = pKid->GetRefObjNum(); | 4179 pNode->m_dwPageNo = pKid->GetRefObjNum(); |
4181 } break; | 4180 } break; |
4182 case PDFOBJ_ARRAY: { | 4181 case PDFOBJ_ARRAY: { |
4183 CPDF_Array* pKidsArray = (CPDF_Array*)pKids; | 4182 CPDF_Array* pKidsArray = pKids->AsArray(); |
4184 for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) { | 4183 for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) { |
4185 CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i); | 4184 CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i); |
4186 if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) { | 4185 if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) { |
4187 continue; | 4186 continue; |
4188 } | 4187 } |
4189 CPDF_PageNode* pNode = new CPDF_PageNode(); | 4188 CPDF_PageNode* pNode = new CPDF_PageNode(); |
4190 pPageNode->m_childNode.Add(pNode); | 4189 pPageNode->m_childNode.Add(pNode); |
4191 pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum(); | 4190 pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum(); |
4192 } | 4191 } |
4193 } break; | 4192 } break; |
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4616 return FALSE; | 4615 return FALSE; |
4617 } | 4616 } |
4618 CPDF_PageNode::~CPDF_PageNode() { | 4617 CPDF_PageNode::~CPDF_PageNode() { |
4619 int32_t iSize = m_childNode.GetSize(); | 4618 int32_t iSize = m_childNode.GetSize(); |
4620 for (int32_t i = 0; i < iSize; ++i) { | 4619 for (int32_t i = 0; i < iSize; ++i) { |
4621 CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i]; | 4620 CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i]; |
4622 delete pNode; | 4621 delete pNode; |
4623 } | 4622 } |
4624 m_childNode.RemoveAll(); | 4623 m_childNode.RemoveAll(); |
4625 } | 4624 } |
OLD | NEW |