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 "core/include/fpdfapi/fpdf_parser.h" | 7 #include "core/include/fpdfapi/fpdf_parser.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 } | 63 } |
64 | 64 |
65 FX_DWORD GetVarInt(const uint8_t* p, int32_t n) { | 65 FX_DWORD GetVarInt(const uint8_t* p, int32_t n) { |
66 FX_DWORD result = 0; | 66 FX_DWORD result = 0; |
67 for (int32_t i = 0; i < n; ++i) | 67 for (int32_t i = 0; i < n; ++i) |
68 result = result * 256 + p[i]; | 68 result = result * 256 + p[i]; |
69 return result; | 69 return result; |
70 } | 70 } |
71 | 71 |
72 int32_t GetStreamNCount(CPDF_StreamAcc* pObjStream) { | 72 int32_t GetStreamNCount(CPDF_StreamAcc* pObjStream) { |
73 return pObjStream->GetDict()->GetInteger("N"); | 73 return pObjStream->GetDict()->GetIntegerBy("N"); |
74 } | 74 } |
75 | 75 |
76 int32_t GetStreamFirst(CPDF_StreamAcc* pObjStream) { | 76 int32_t GetStreamFirst(CPDF_StreamAcc* pObjStream) { |
77 return pObjStream->GetDict()->GetInteger("First"); | 77 return pObjStream->GetDict()->GetIntegerBy("First"); |
78 } | 78 } |
79 | 79 |
80 bool CanReadFromBitStream(const CFX_BitStream* hStream, | 80 bool CanReadFromBitStream(const CFX_BitStream* hStream, |
81 const FX_SAFE_DWORD& num_bits) { | 81 const FX_SAFE_DWORD& num_bits) { |
82 return (num_bits.IsValid() && | 82 return (num_bits.IsValid() && |
83 hStream->BitsRemaining() >= num_bits.ValueOrDie()); | 83 hStream->BitsRemaining() >= num_bits.ValueOrDie()); |
84 } | 84 } |
85 | 85 |
86 } // namespace | 86 } // namespace |
87 | 87 |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 if (!m_pSecurityHandler->OnInit(this, m_pEncryptDict)) { | 307 if (!m_pSecurityHandler->OnInit(this, m_pEncryptDict)) { |
308 return HANDLER_ERROR; | 308 return HANDLER_ERROR; |
309 } | 309 } |
310 std::unique_ptr<CPDF_CryptoHandler> pCryptoHandler( | 310 std::unique_ptr<CPDF_CryptoHandler> pCryptoHandler( |
311 m_pSecurityHandler->CreateCryptoHandler()); | 311 m_pSecurityHandler->CreateCryptoHandler()); |
312 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler.get())) { | 312 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler.get())) { |
313 return HANDLER_ERROR; | 313 return HANDLER_ERROR; |
314 } | 314 } |
315 m_Syntax.SetEncrypt(pCryptoHandler.release()); | 315 m_Syntax.SetEncrypt(pCryptoHandler.release()); |
316 } else if (m_pEncryptDict) { | 316 } else if (m_pEncryptDict) { |
317 CFX_ByteString filter = m_pEncryptDict->GetString("Filter"); | 317 CFX_ByteString filter = m_pEncryptDict->GetStringBy("Filter"); |
318 std::unique_ptr<CPDF_SecurityHandler> pSecurityHandler; | 318 std::unique_ptr<CPDF_SecurityHandler> pSecurityHandler; |
319 Error err = HANDLER_ERROR; | 319 Error err = HANDLER_ERROR; |
320 if (filter == "Standard") { | 320 if (filter == "Standard") { |
321 pSecurityHandler.reset(FPDF_CreateStandardSecurityHandler()); | 321 pSecurityHandler.reset(FPDF_CreateStandardSecurityHandler()); |
322 err = PASSWORD_ERROR; | 322 err = PASSWORD_ERROR; |
323 } | 323 } |
324 if (!pSecurityHandler) { | 324 if (!pSecurityHandler) { |
325 return HANDLER_ERROR; | 325 return HANDLER_ERROR; |
326 } | 326 } |
327 if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) { | 327 if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 return FALSE; | 389 return FALSE; |
390 seen_xrefpos.insert(xrefpos); | 390 seen_xrefpos.insert(xrefpos); |
391 CrossRefList.InsertAt(0, xrefpos); | 391 CrossRefList.InsertAt(0, xrefpos); |
392 LoadCrossRefV4(xrefpos, 0, TRUE); | 392 LoadCrossRefV4(xrefpos, 0, TRUE); |
393 std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> pDict( | 393 std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> pDict( |
394 LoadTrailerV4()); | 394 LoadTrailerV4()); |
395 if (!pDict) | 395 if (!pDict) |
396 return FALSE; | 396 return FALSE; |
397 xrefpos = GetDirectInteger(pDict.get(), "Prev"); | 397 xrefpos = GetDirectInteger(pDict.get(), "Prev"); |
398 | 398 |
399 XRefStreamList.InsertAt(0, pDict->GetInteger("XRefStm")); | 399 XRefStreamList.InsertAt(0, pDict->GetIntegerBy("XRefStm")); |
400 m_Trailers.Add(pDict.release()); | 400 m_Trailers.Add(pDict.release()); |
401 } | 401 } |
402 for (int32_t i = 0; i < CrossRefList.GetSize(); i++) { | 402 for (int32_t i = 0; i < CrossRefList.GetSize(); i++) { |
403 if (!LoadCrossRefV4(CrossRefList[i], XRefStreamList[i], FALSE)) | 403 if (!LoadCrossRefV4(CrossRefList[i], XRefStreamList[i], FALSE)) |
404 return FALSE; | 404 return FALSE; |
405 } | 405 } |
406 return TRUE; | 406 return TRUE; |
407 } | 407 } |
408 FX_BOOL CPDF_Parser::LoadLinearizedAllCrossRefV4(FX_FILESIZE xrefpos, | 408 FX_BOOL CPDF_Parser::LoadLinearizedAllCrossRefV4(FX_FILESIZE xrefpos, |
409 FX_DWORD dwObjCount) { | 409 FX_DWORD dwObjCount) { |
(...skipping 22 matching lines...) Expand all Loading... |
432 seen_xrefpos.insert(xrefpos); | 432 seen_xrefpos.insert(xrefpos); |
433 CrossRefList.InsertAt(0, xrefpos); | 433 CrossRefList.InsertAt(0, xrefpos); |
434 LoadCrossRefV4(xrefpos, 0, TRUE); | 434 LoadCrossRefV4(xrefpos, 0, TRUE); |
435 std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> pDict( | 435 std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> pDict( |
436 LoadTrailerV4()); | 436 LoadTrailerV4()); |
437 if (!pDict) { | 437 if (!pDict) { |
438 return FALSE; | 438 return FALSE; |
439 } | 439 } |
440 xrefpos = GetDirectInteger(pDict.get(), "Prev"); | 440 xrefpos = GetDirectInteger(pDict.get(), "Prev"); |
441 | 441 |
442 XRefStreamList.InsertAt(0, pDict->GetInteger("XRefStm")); | 442 XRefStreamList.InsertAt(0, pDict->GetIntegerBy("XRefStm")); |
443 m_Trailers.Add(pDict.release()); | 443 m_Trailers.Add(pDict.release()); |
444 } | 444 } |
445 for (int32_t i = 1; i < CrossRefList.GetSize(); i++) | 445 for (int32_t i = 1; i < CrossRefList.GetSize(); i++) |
446 if (!LoadCrossRefV4(CrossRefList[i], XRefStreamList[i], FALSE)) { | 446 if (!LoadCrossRefV4(CrossRefList[i], XRefStreamList[i], FALSE)) { |
447 return FALSE; | 447 return FALSE; |
448 } | 448 } |
449 return TRUE; | 449 return TRUE; |
450 } | 450 } |
451 FX_BOOL CPDF_Parser::LoadLinearizedCrossRefV4(FX_FILESIZE pos, | 451 FX_BOOL CPDF_Parser::LoadLinearizedCrossRefV4(FX_FILESIZE pos, |
452 FX_DWORD dwObjCount) { | 452 FX_DWORD dwObjCount) { |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 CompareFileSize); | 783 CompareFileSize); |
784 if (!pResult) { | 784 if (!pResult) { |
785 m_SortedOffset.Add(obj_pos); | 785 m_SortedOffset.Add(obj_pos); |
786 } | 786 } |
787 FX_FILESIZE obj_end = 0; | 787 FX_FILESIZE obj_end = 0; |
788 CPDF_Object* pObject = ParseIndirectObjectAtByStrict( | 788 CPDF_Object* pObject = ParseIndirectObjectAtByStrict( |
789 m_pDocument, obj_pos, objnum, &obj_end); | 789 m_pDocument, obj_pos, objnum, &obj_end); |
790 if (CPDF_Stream* pStream = ToStream(pObject)) { | 790 if (CPDF_Stream* pStream = ToStream(pObject)) { |
791 if (CPDF_Dictionary* pDict = pStream->GetDict()) { | 791 if (CPDF_Dictionary* pDict = pStream->GetDict()) { |
792 if ((pDict->KeyExist("Type")) && | 792 if ((pDict->KeyExist("Type")) && |
793 (pDict->GetString("Type") == "XRef" && | 793 (pDict->GetStringBy("Type") == "XRef" && |
794 pDict->KeyExist("Size"))) { | 794 pDict->KeyExist("Size"))) { |
795 CPDF_Object* pRoot = pDict->GetElement("Root"); | 795 CPDF_Object* pRoot = pDict->GetElement("Root"); |
796 if (pRoot && pRoot->GetDict() && | 796 if (pRoot && pRoot->GetDict() && |
797 pRoot->GetDict()->GetElement("Pages")) { | 797 pRoot->GetDict()->GetElement("Pages")) { |
798 if (m_pTrailer) | 798 if (m_pTrailer) |
799 m_pTrailer->Release(); | 799 m_pTrailer->Release(); |
800 m_pTrailer = ToDictionary(pDict->Clone()); | 800 m_pTrailer = ToDictionary(pDict->Clone()); |
801 } | 801 } |
802 } | 802 } |
803 } | 803 } |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 pObject->Release(); | 1007 pObject->Release(); |
1008 } | 1008 } |
1009 if (!bInserted) | 1009 if (!bInserted) |
1010 return FALSE; | 1010 return FALSE; |
1011 } | 1011 } |
1012 | 1012 |
1013 CPDF_Stream* pStream = pObject->AsStream(); | 1013 CPDF_Stream* pStream = pObject->AsStream(); |
1014 if (!pStream) | 1014 if (!pStream) |
1015 return FALSE; | 1015 return FALSE; |
1016 | 1016 |
1017 *pos = pStream->GetDict()->GetInteger("Prev"); | 1017 *pos = pStream->GetDict()->GetIntegerBy("Prev"); |
1018 int32_t size = pStream->GetDict()->GetInteger("Size"); | 1018 int32_t size = pStream->GetDict()->GetIntegerBy("Size"); |
1019 if (size < 0) { | 1019 if (size < 0) { |
1020 pStream->Release(); | 1020 pStream->Release(); |
1021 return FALSE; | 1021 return FALSE; |
1022 } | 1022 } |
1023 if (bMainXRef) { | 1023 if (bMainXRef) { |
1024 m_pTrailer = ToDictionary(pStream->GetDict()->Clone()); | 1024 m_pTrailer = ToDictionary(pStream->GetDict()->Clone()); |
1025 ShrinkObjectMap(size); | 1025 ShrinkObjectMap(size); |
1026 if (m_V5Type.SetSize(size)) { | 1026 if (m_V5Type.SetSize(size)) { |
1027 FXSYS_memset(m_V5Type.GetData(), 0, size); | 1027 FXSYS_memset(m_V5Type.GetData(), 0, size); |
1028 } | 1028 } |
1029 } else { | 1029 } else { |
1030 m_Trailers.Add(ToDictionary(pStream->GetDict()->Clone())); | 1030 m_Trailers.Add(ToDictionary(pStream->GetDict()->Clone())); |
1031 } | 1031 } |
1032 std::vector<std::pair<int32_t, int32_t> > arrIndex; | 1032 std::vector<std::pair<int32_t, int32_t> > arrIndex; |
1033 CPDF_Array* pArray = pStream->GetDict()->GetArray("Index"); | 1033 CPDF_Array* pArray = pStream->GetDict()->GetArrayBy("Index"); |
1034 if (pArray) { | 1034 if (pArray) { |
1035 FX_DWORD nPairSize = pArray->GetCount() / 2; | 1035 FX_DWORD nPairSize = pArray->GetCount() / 2; |
1036 for (FX_DWORD i = 0; i < nPairSize; i++) { | 1036 for (FX_DWORD i = 0; i < nPairSize; i++) { |
1037 CPDF_Object* pStartNumObj = pArray->GetElement(i * 2); | 1037 CPDF_Object* pStartNumObj = pArray->GetElement(i * 2); |
1038 CPDF_Object* pCountObj = pArray->GetElement(i * 2 + 1); | 1038 CPDF_Object* pCountObj = pArray->GetElement(i * 2 + 1); |
1039 if (ToNumber(pStartNumObj) && ToNumber(pCountObj)) { | 1039 if (ToNumber(pStartNumObj) && ToNumber(pCountObj)) { |
1040 int nStartNum = pStartNumObj->GetInteger(); | 1040 int nStartNum = pStartNumObj->GetInteger(); |
1041 int nCount = pCountObj->GetInteger(); | 1041 int nCount = pCountObj->GetInteger(); |
1042 if (nStartNum >= 0 && nCount > 0) { | 1042 if (nStartNum >= 0 && nCount > 0) { |
1043 arrIndex.push_back(std::make_pair(nStartNum, nCount)); | 1043 arrIndex.push_back(std::make_pair(nStartNum, nCount)); |
1044 } | 1044 } |
1045 } | 1045 } |
1046 } | 1046 } |
1047 } | 1047 } |
1048 if (arrIndex.size() == 0) { | 1048 if (arrIndex.size() == 0) { |
1049 arrIndex.push_back(std::make_pair(0, size)); | 1049 arrIndex.push_back(std::make_pair(0, size)); |
1050 } | 1050 } |
1051 pArray = pStream->GetDict()->GetArray("W"); | 1051 pArray = pStream->GetDict()->GetArrayBy("W"); |
1052 if (!pArray) { | 1052 if (!pArray) { |
1053 pStream->Release(); | 1053 pStream->Release(); |
1054 return FALSE; | 1054 return FALSE; |
1055 } | 1055 } |
1056 CFX_DWordArray WidthArray; | 1056 CFX_DWordArray WidthArray; |
1057 FX_SAFE_DWORD dwAccWidth = 0; | 1057 FX_SAFE_DWORD dwAccWidth = 0; |
1058 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { | 1058 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { |
1059 WidthArray.Add(pArray->GetInteger(i)); | 1059 WidthArray.Add(pArray->GetIntegerAt(i)); |
1060 dwAccWidth += WidthArray[i]; | 1060 dwAccWidth += WidthArray[i]; |
1061 } | 1061 } |
1062 if (!dwAccWidth.IsValid() || WidthArray.GetSize() < 3) { | 1062 if (!dwAccWidth.IsValid() || WidthArray.GetSize() < 3) { |
1063 pStream->Release(); | 1063 pStream->Release(); |
1064 return FALSE; | 1064 return FALSE; |
1065 } | 1065 } |
1066 FX_DWORD totalWidth = dwAccWidth.ValueOrDie(); | 1066 FX_DWORD totalWidth = dwAccWidth.ValueOrDie(); |
1067 CPDF_StreamAcc acc; | 1067 CPDF_StreamAcc acc; |
1068 acc.LoadAllData(pStream); | 1068 acc.LoadAllData(pStream); |
1069 const uint8_t* pData = acc.GetData(); | 1069 const uint8_t* pData = acc.GetData(); |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1480 if (!ToDictionary(pObj.get())) | 1480 if (!ToDictionary(pObj.get())) |
1481 return nullptr; | 1481 return nullptr; |
1482 return pObj.release()->AsDictionary(); | 1482 return pObj.release()->AsDictionary(); |
1483 } | 1483 } |
1484 | 1484 |
1485 FX_DWORD CPDF_Parser::GetPermissions(FX_BOOL bCheckRevision) { | 1485 FX_DWORD CPDF_Parser::GetPermissions(FX_BOOL bCheckRevision) { |
1486 if (!m_pSecurityHandler) { | 1486 if (!m_pSecurityHandler) { |
1487 return (FX_DWORD)-1; | 1487 return (FX_DWORD)-1; |
1488 } | 1488 } |
1489 FX_DWORD dwPermission = m_pSecurityHandler->GetPermissions(); | 1489 FX_DWORD dwPermission = m_pSecurityHandler->GetPermissions(); |
1490 if (m_pEncryptDict && m_pEncryptDict->GetString("Filter") == "Standard") { | 1490 if (m_pEncryptDict && m_pEncryptDict->GetStringBy("Filter") == "Standard") { |
1491 dwPermission &= 0xFFFFFFFC; | 1491 dwPermission &= 0xFFFFFFFC; |
1492 dwPermission |= 0xFFFFF0C0; | 1492 dwPermission |= 0xFFFFF0C0; |
1493 if (bCheckRevision && m_pEncryptDict->GetInteger("R") == 2) { | 1493 if (bCheckRevision && m_pEncryptDict->GetIntegerBy("R") == 2) { |
1494 dwPermission &= 0xFFFFF0FF; | 1494 dwPermission &= 0xFFFFF0FF; |
1495 } | 1495 } |
1496 } | 1496 } |
1497 return dwPermission; | 1497 return dwPermission; |
1498 } | 1498 } |
1499 FX_BOOL CPDF_Parser::IsOwner() { | 1499 FX_BOOL CPDF_Parser::IsOwner() { |
1500 return !m_pSecurityHandler || m_pSecurityHandler->IsOwner(); | 1500 return !m_pSecurityHandler || m_pSecurityHandler->IsOwner(); |
1501 } | 1501 } |
1502 void CPDF_Parser::SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, | 1502 void CPDF_Parser::SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, |
1503 FX_BOOL bForced) { | 1503 FX_BOOL bForced) { |
(...skipping 1438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2942 case CPDF_Object::ARRAY: { | 2942 case CPDF_Object::ARRAY: { |
2943 CPDF_Array* pArray = pObj->GetArray(); | 2943 CPDF_Array* pArray = pObj->GetArray(); |
2944 for (FX_DWORD k = 0; k < pArray->GetCount(); k++) { | 2944 for (FX_DWORD k = 0; k < pArray->GetCount(); k++) { |
2945 new_obj_array.Add(pArray->GetElement(k)); | 2945 new_obj_array.Add(pArray->GetElement(k)); |
2946 } | 2946 } |
2947 } break; | 2947 } break; |
2948 case CPDF_Object::STREAM: | 2948 case CPDF_Object::STREAM: |
2949 pObj = pObj->GetDict(); | 2949 pObj = pObj->GetDict(); |
2950 case CPDF_Object::DICTIONARY: { | 2950 case CPDF_Object::DICTIONARY: { |
2951 CPDF_Dictionary* pDict = pObj->GetDict(); | 2951 CPDF_Dictionary* pDict = pObj->GetDict(); |
2952 if (pDict && pDict->GetString("Type") == "Page" && !bParsePage) { | 2952 if (pDict && pDict->GetStringBy("Type") == "Page" && !bParsePage) { |
2953 continue; | 2953 continue; |
2954 } | 2954 } |
2955 for (const auto& it : *pDict) { | 2955 for (const auto& it : *pDict) { |
2956 const CFX_ByteString& key = it.first; | 2956 const CFX_ByteString& key = it.first; |
2957 CPDF_Object* value = it.second; | 2957 CPDF_Object* value = it.second; |
2958 if (key != "Parent") { | 2958 if (key != "Parent") { |
2959 new_obj_array.Add(value); | 2959 new_obj_array.Add(value); |
2960 } | 2960 } |
2961 } | 2961 } |
2962 } break; | 2962 } break; |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3293 for (int32_t j = 0; j < iSize; ++j) { | 3293 for (int32_t j = 0; j < iSize; ++j) { |
3294 if (CPDF_Reference* pRef = ToReference(pArray->GetElement(j))) | 3294 if (CPDF_Reference* pRef = ToReference(pArray->GetElement(j))) |
3295 UnavailObjList.Add(pRef->GetRefObjNum()); | 3295 UnavailObjList.Add(pRef->GetRefObjNum()); |
3296 } | 3296 } |
3297 } | 3297 } |
3298 } | 3298 } |
3299 if (!pObj->IsDictionary()) { | 3299 if (!pObj->IsDictionary()) { |
3300 pObj->Release(); | 3300 pObj->Release(); |
3301 continue; | 3301 continue; |
3302 } | 3302 } |
3303 CFX_ByteString type = pObj->GetDict()->GetString("Type"); | 3303 CFX_ByteString type = pObj->GetDict()->GetStringBy("Type"); |
3304 if (type == "Pages") { | 3304 if (type == "Pages") { |
3305 m_PagesArray.Add(pObj); | 3305 m_PagesArray.Add(pObj); |
3306 continue; | 3306 continue; |
3307 } | 3307 } |
3308 pObj->Release(); | 3308 pObj->Release(); |
3309 } | 3309 } |
3310 m_PageObjList.RemoveAll(); | 3310 m_PageObjList.RemoveAll(); |
3311 if (UnavailObjList.GetSize()) { | 3311 if (UnavailObjList.GetSize()) { |
3312 m_PageObjList.Append(UnavailObjList); | 3312 m_PageObjList.Append(UnavailObjList); |
3313 return FALSE; | 3313 return FALSE; |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3494 } | 3494 } |
3495 if (!pDict->KeyExist("H") || !pDict->KeyExist("O") || !pDict->KeyExist("N")) { | 3495 if (!pDict->KeyExist("H") || !pDict->KeyExist("O") || !pDict->KeyExist("N")) { |
3496 m_docStatus = PDF_DATAAVAIL_ERROR; | 3496 m_docStatus = PDF_DATAAVAIL_ERROR; |
3497 return FALSE; | 3497 return FALSE; |
3498 } | 3498 } |
3499 int nPageCount = pDict->GetElementValue("N")->GetInteger(); | 3499 int nPageCount = pDict->GetElementValue("N")->GetInteger(); |
3500 if (nPageCount <= 1) { | 3500 if (nPageCount <= 1) { |
3501 m_docStatus = PDF_DATAAVAIL_DONE; | 3501 m_docStatus = PDF_DATAAVAIL_DONE; |
3502 return TRUE; | 3502 return TRUE; |
3503 } | 3503 } |
3504 CPDF_Array* pHintStreamRange = pDict->GetArray("H"); | 3504 CPDF_Array* pHintStreamRange = pDict->GetArrayBy("H"); |
3505 FX_FILESIZE szHSStart = | 3505 FX_FILESIZE szHSStart = |
3506 pHintStreamRange->GetElementValue(0) | 3506 pHintStreamRange->GetElementValue(0) |
3507 ? pHintStreamRange->GetElementValue(0)->GetInteger() | 3507 ? pHintStreamRange->GetElementValue(0)->GetInteger() |
3508 : 0; | 3508 : 0; |
3509 FX_FILESIZE szHSLength = | 3509 FX_FILESIZE szHSLength = |
3510 pHintStreamRange->GetElementValue(1) | 3510 pHintStreamRange->GetElementValue(1) |
3511 ? pHintStreamRange->GetElementValue(1)->GetInteger() | 3511 ? pHintStreamRange->GetElementValue(1)->GetInteger() |
3512 : 0; | 3512 : 0; |
3513 if (szHSStart < 0 || szHSLength <= 0) { | 3513 if (szHSStart < 0 || szHSLength <= 0) { |
3514 m_docStatus = PDF_DATAAVAIL_ERROR; | 3514 m_docStatus = PDF_DATAAVAIL_ERROR; |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3675 CPDF_Object* pObj = m_parser.ParseIndirectObjectAt(nullptr, 0, objNum); | 3675 CPDF_Object* pObj = m_parser.ParseIndirectObjectAt(nullptr, 0, objNum); |
3676 if (!pObj) { | 3676 if (!pObj) { |
3677 m_Pos += m_parser.m_Syntax.SavePos(); | 3677 m_Pos += m_parser.m_Syntax.SavePos(); |
3678 return 0; | 3678 return 0; |
3679 } | 3679 } |
3680 CPDF_Dictionary* pDict = pObj->GetDict(); | 3680 CPDF_Dictionary* pDict = pObj->GetDict(); |
3681 CPDF_Name* pName = ToName(pDict ? pDict->GetElement("Type") : nullptr); | 3681 CPDF_Name* pName = ToName(pDict ? pDict->GetElement("Type") : nullptr); |
3682 if (pName) { | 3682 if (pName) { |
3683 if (pName->GetString() == "XRef") { | 3683 if (pName->GetString() == "XRef") { |
3684 m_Pos += m_parser.m_Syntax.SavePos(); | 3684 m_Pos += m_parser.m_Syntax.SavePos(); |
3685 xref_offset = pObj->GetDict()->GetInteger("Prev"); | 3685 xref_offset = pObj->GetDict()->GetIntegerBy("Prev"); |
3686 pObj->Release(); | 3686 pObj->Release(); |
3687 return 1; | 3687 return 1; |
3688 } | 3688 } |
3689 } | 3689 } |
3690 pObj->Release(); | 3690 pObj->Release(); |
3691 return -1; | 3691 return -1; |
3692 } | 3692 } |
3693 pHints->AddSegment(m_Pos, req_size); | 3693 pHints->AddSegment(m_Pos, req_size); |
3694 return 0; | 3694 return 0; |
3695 } | 3695 } |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4025 pPage->Release(); | 4025 pPage->Release(); |
4026 return TRUE; | 4026 return TRUE; |
4027 } | 4027 } |
4028 if (!pPage->IsDictionary()) { | 4028 if (!pPage->IsDictionary()) { |
4029 pPage->Release(); | 4029 pPage->Release(); |
4030 m_docStatus = PDF_DATAAVAIL_ERROR; | 4030 m_docStatus = PDF_DATAAVAIL_ERROR; |
4031 return FALSE; | 4031 return FALSE; |
4032 } | 4032 } |
4033 pPageNode->m_dwPageNo = dwPageNo; | 4033 pPageNode->m_dwPageNo = dwPageNo; |
4034 CPDF_Dictionary* pDict = pPage->GetDict(); | 4034 CPDF_Dictionary* pDict = pPage->GetDict(); |
4035 CFX_ByteString type = pDict->GetString("Type"); | 4035 CFX_ByteString type = pDict->GetStringBy("Type"); |
4036 if (type == "Pages") { | 4036 if (type == "Pages") { |
4037 pPageNode->m_type = PDF_PAGENODE_PAGES; | 4037 pPageNode->m_type = PDF_PAGENODE_PAGES; |
4038 CPDF_Object* pKids = pDict->GetElement("Kids"); | 4038 CPDF_Object* pKids = pDict->GetElement("Kids"); |
4039 if (!pKids) { | 4039 if (!pKids) { |
4040 m_docStatus = PDF_DATAAVAIL_PAGE; | 4040 m_docStatus = PDF_DATAAVAIL_PAGE; |
4041 return TRUE; | 4041 return TRUE; |
4042 } | 4042 } |
4043 switch (pKids->GetType()) { | 4043 switch (pKids->GetType()) { |
4044 case CPDF_Object::REFERENCE: { | 4044 case CPDF_Object::REFERENCE: { |
4045 CPDF_Reference* pKid = pKids->AsReference(); | 4045 CPDF_Reference* pKid = pKids->AsReference(); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4152 CPDF_Dictionary* pPagesDict = pPages->GetDict(); | 4152 CPDF_Dictionary* pPagesDict = pPages->GetDict(); |
4153 if (!pPagesDict) { | 4153 if (!pPagesDict) { |
4154 pPages->Release(); | 4154 pPages->Release(); |
4155 m_docStatus = PDF_DATAAVAIL_ERROR; | 4155 m_docStatus = PDF_DATAAVAIL_ERROR; |
4156 return FALSE; | 4156 return FALSE; |
4157 } | 4157 } |
4158 if (!pPagesDict->KeyExist("Kids")) { | 4158 if (!pPagesDict->KeyExist("Kids")) { |
4159 pPages->Release(); | 4159 pPages->Release(); |
4160 return TRUE; | 4160 return TRUE; |
4161 } | 4161 } |
4162 int count = pPagesDict->GetInteger("Count"); | 4162 int count = pPagesDict->GetIntegerBy("Count"); |
4163 if (count > 0) { | 4163 if (count > 0) { |
4164 pPages->Release(); | 4164 pPages->Release(); |
4165 return TRUE; | 4165 return TRUE; |
4166 } | 4166 } |
4167 pPages->Release(); | 4167 pPages->Release(); |
4168 return FALSE; | 4168 return FALSE; |
4169 } | 4169 } |
4170 FX_BOOL CPDF_DataAvail::LoadDocPages(IFX_DownloadHints* pHints) { | 4170 FX_BOOL CPDF_DataAvail::LoadDocPages(IFX_DownloadHints* pHints) { |
4171 if (!CheckUnkownPageNode(m_PagesObjNum, &m_pageNodes, pHints)) { | 4171 if (!CheckUnkownPageNode(m_PagesObjNum, &m_pageNodes, pHints)) { |
4172 return FALSE; | 4172 return FALSE; |
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4868 CFX_BitStream bs; | 4868 CFX_BitStream bs; |
4869 bs.Init(acc.GetData(), size); | 4869 bs.Init(acc.GetData(), size); |
4870 return ReadPageHintTable(&bs) && | 4870 return ReadPageHintTable(&bs) && |
4871 ReadSharedObjHintTable(&bs, pdfium::base::checked_cast<FX_DWORD>( | 4871 ReadSharedObjHintTable(&bs, pdfium::base::checked_cast<FX_DWORD>( |
4872 shared_hint_table_offset)); | 4872 shared_hint_table_offset)); |
4873 } | 4873 } |
4874 | 4874 |
4875 int CPDF_HintTables::ReadPrimaryHintStreamOffset() const { | 4875 int CPDF_HintTables::ReadPrimaryHintStreamOffset() const { |
4876 if (!m_pLinearizedDict) | 4876 if (!m_pLinearizedDict) |
4877 return -1; | 4877 return -1; |
4878 CPDF_Array* pRange = m_pLinearizedDict->GetArray("H"); | 4878 CPDF_Array* pRange = m_pLinearizedDict->GetArrayBy("H"); |
4879 if (!pRange) | 4879 if (!pRange) |
4880 return -1; | 4880 return -1; |
4881 CPDF_Object* pStreamOffset = pRange->GetElementValue(0); | 4881 CPDF_Object* pStreamOffset = pRange->GetElementValue(0); |
4882 if (!pStreamOffset) | 4882 if (!pStreamOffset) |
4883 return -1; | 4883 return -1; |
4884 return pStreamOffset->GetInteger(); | 4884 return pStreamOffset->GetInteger(); |
4885 } | 4885 } |
4886 int CPDF_HintTables::ReadPrimaryHintStreamLength() const { | 4886 int CPDF_HintTables::ReadPrimaryHintStreamLength() const { |
4887 if (!m_pLinearizedDict) | 4887 if (!m_pLinearizedDict) |
4888 return -1; | 4888 return -1; |
4889 CPDF_Array* pRange = m_pLinearizedDict->GetArray("H"); | 4889 CPDF_Array* pRange = m_pLinearizedDict->GetArrayBy("H"); |
4890 if (!pRange) | 4890 if (!pRange) |
4891 return -1; | 4891 return -1; |
4892 CPDF_Object* pStreamLen = pRange->GetElementValue(1); | 4892 CPDF_Object* pStreamLen = pRange->GetElementValue(1); |
4893 if (!pStreamLen) | 4893 if (!pStreamLen) |
4894 return -1; | 4894 return -1; |
4895 return pStreamLen->GetInteger(); | 4895 return pStreamLen->GetInteger(); |
4896 } | 4896 } |
OLD | NEW |