OLD | NEW |
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/parser/cpdf_data_avail.h" | 7 #include "core/fpdfapi/parser/cpdf_data_avail.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 } break; | 148 } break; |
149 case CPDF_Object::STREAM: | 149 case CPDF_Object::STREAM: |
150 pObj = pObj->GetDict(); | 150 pObj = pObj->GetDict(); |
151 case CPDF_Object::DICTIONARY: { | 151 case CPDF_Object::DICTIONARY: { |
152 CPDF_Dictionary* pDict = pObj->GetDict(); | 152 CPDF_Dictionary* pDict = pObj->GetDict(); |
153 if (pDict && pDict->GetStringFor("Type") == "Page" && !bParsePage) | 153 if (pDict && pDict->GetStringFor("Type") == "Page" && !bParsePage) |
154 continue; | 154 continue; |
155 | 155 |
156 for (const auto& it : *pDict) { | 156 for (const auto& it : *pDict) { |
157 const CFX_ByteString& key = it.first; | 157 const CFX_ByteString& key = it.first; |
158 CPDF_Object* value = it.second; | 158 CPDF_Object* value = it.second.get(); |
159 if (key != "Parent") | 159 if (key != "Parent") |
160 new_obj_array.push_back(value); | 160 new_obj_array.push_back(value); |
161 } | 161 } |
162 } break; | 162 } break; |
163 case CPDF_Object::REFERENCE: { | 163 case CPDF_Object::REFERENCE: { |
164 CPDF_Reference* pRef = pObj->AsReference(); | 164 CPDF_Reference* pRef = pObj->AsReference(); |
165 uint32_t dwNum = pRef->GetRefObjNum(); | 165 uint32_t dwNum = pRef->GetRefObjNum(); |
166 | 166 |
167 FX_FILESIZE offset; | 167 FX_FILESIZE offset; |
168 uint32_t size = GetObjectSize(dwNum, offset); | 168 uint32_t size = GetObjectSize(dwNum, offset); |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 FX_BOOL bExist = FALSE; | 486 FX_BOOL bExist = FALSE; |
487 CPDF_Object* pObj = GetObject(dwPageObjNum, pHints, &bExist); | 487 CPDF_Object* pObj = GetObject(dwPageObjNum, pHints, &bExist); |
488 if (!pObj) { | 488 if (!pObj) { |
489 if (bExist) | 489 if (bExist) |
490 UnavailObjList.Add(dwPageObjNum); | 490 UnavailObjList.Add(dwPageObjNum); |
491 continue; | 491 continue; |
492 } | 492 } |
493 | 493 |
494 CPDF_Array* pArray = ToArray(pObj); | 494 CPDF_Array* pArray = ToArray(pObj); |
495 if (pArray) { | 495 if (pArray) { |
496 for (CPDF_Object* pArrayObj : *pArray) { | 496 for (auto& pArrayObj : *pArray) { |
497 if (CPDF_Reference* pRef = ToReference(pArrayObj)) | 497 if (CPDF_Reference* pRef = ToReference(pArrayObj.get())) |
498 UnavailObjList.Add(pRef->GetRefObjNum()); | 498 UnavailObjList.Add(pRef->GetRefObjNum()); |
499 } | 499 } |
500 } | 500 } |
501 | 501 |
502 if (!pObj->IsDictionary()) { | 502 if (!pObj->IsDictionary()) { |
503 pObj->Release(); | 503 pObj->Release(); |
504 continue; | 504 continue; |
505 } | 505 } |
506 | 506 |
507 CFX_ByteString type = pObj->GetDict()->GetStringFor("Type"); | 507 CFX_ByteString type = pObj->GetDict()->GetStringFor("Type"); |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
735 return TRUE; | 735 return TRUE; |
736 } | 736 } |
737 | 737 |
738 CPDF_Array* pHintStreamRange = pDict->GetArrayFor("H"); | 738 CPDF_Array* pHintStreamRange = pDict->GetArrayFor("H"); |
739 size_t nHintStreamSize = pHintStreamRange ? pHintStreamRange->GetCount() : 0; | 739 size_t nHintStreamSize = pHintStreamRange ? pHintStreamRange->GetCount() : 0; |
740 if (nHintStreamSize != 2 && nHintStreamSize != 4) { | 740 if (nHintStreamSize != 2 && nHintStreamSize != 4) { |
741 m_docStatus = PDF_DATAAVAIL_ERROR; | 741 m_docStatus = PDF_DATAAVAIL_ERROR; |
742 return FALSE; | 742 return FALSE; |
743 } | 743 } |
744 | 744 |
745 for (const CPDF_Object* pArrayObject : *pHintStreamRange) { | 745 for (const auto& pArrayObject : *pHintStreamRange) { |
746 const CPDF_Number* pNumber = ToNumber(pArrayObject->GetDirect()); | 746 const CPDF_Number* pNumber = ToNumber(pArrayObject->GetDirect()); |
747 if (!pNumber || !pNumber->IsInteger()) { | 747 if (!pNumber || !pNumber->IsInteger()) { |
748 m_docStatus = PDF_DATAAVAIL_ERROR; | 748 m_docStatus = PDF_DATAAVAIL_ERROR; |
749 return FALSE; | 749 return FALSE; |
750 } | 750 } |
751 } | 751 } |
752 | 752 |
753 FX_FILESIZE szHintStart = pHintStreamRange->GetIntegerAt(0); | 753 FX_FILESIZE szHintStart = pHintStreamRange->GetIntegerAt(0); |
754 FX_FILESIZE szHintLength = pHintStreamRange->GetIntegerAt(1); | 754 FX_FILESIZE szHintLength = pHintStreamRange->GetIntegerAt(1); |
755 if (szHintStart < 0 || szHintLength <= 0) { | 755 if (szHintStart < 0 || szHintLength <= 0) { |
(...skipping 1060 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1816 return FormAvailable; | 1816 return FormAvailable; |
1817 } | 1817 } |
1818 | 1818 |
1819 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} | 1819 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} |
1820 | 1820 |
1821 CPDF_DataAvail::PageNode::~PageNode() { | 1821 CPDF_DataAvail::PageNode::~PageNode() { |
1822 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) | 1822 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) |
1823 delete m_childNode[i]; | 1823 delete m_childNode[i]; |
1824 m_childNode.RemoveAll(); | 1824 m_childNode.RemoveAll(); |
1825 } | 1825 } |
OLD | NEW |