| 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/fpdf_parser/cpdf_data_avail.h" | 7 #include "core/fpdfapi/fpdf_parser/cpdf_data_avail.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 m_pPageResource = nullptr; | 75 m_pPageResource = nullptr; |
| 76 m_docStatus = PDF_DATAAVAIL_HEADER; | 76 m_docStatus = PDF_DATAAVAIL_HEADER; |
| 77 m_parser.m_bOwnFileRead = false; | 77 m_parser.m_bOwnFileRead = false; |
| 78 m_bTotalLoadPageTree = FALSE; | 78 m_bTotalLoadPageTree = FALSE; |
| 79 m_bCurPageDictLoadOK = FALSE; | 79 m_bCurPageDictLoadOK = FALSE; |
| 80 m_bLinearedDataOK = FALSE; | 80 m_bLinearedDataOK = FALSE; |
| 81 m_bSupportHintTable = bSupportHintTable; | 81 m_bSupportHintTable = bSupportHintTable; |
| 82 } | 82 } |
| 83 CPDF_DataAvail::~CPDF_DataAvail() { | 83 CPDF_DataAvail::~CPDF_DataAvail() { |
| 84 m_pHintTables.reset(); | 84 m_pHintTables.reset(); |
| 85 if (m_pLinearized) | 85 delete m_pLinearized; |
| 86 m_pLinearized->Release(); | 86 delete m_pRoot; |
| 87 | 87 delete m_pTrailer; |
| 88 if (m_pRoot) | |
| 89 m_pRoot->Release(); | |
| 90 | |
| 91 if (m_pTrailer) | |
| 92 m_pTrailer->Release(); | |
| 93 | 88 |
| 94 int iSize = m_arrayAcroforms.GetSize(); | 89 int iSize = m_arrayAcroforms.GetSize(); |
| 95 for (int i = 0; i < iSize; ++i) | 90 for (int i = 0; i < iSize; ++i) |
| 96 m_arrayAcroforms.GetAt(i)->Release(); | 91 delete m_arrayAcroforms.GetAt(i); |
| 97 } | 92 } |
| 98 | 93 |
| 99 void CPDF_DataAvail::SetDocument(CPDF_Document* pDoc) { | 94 void CPDF_DataAvail::SetDocument(CPDF_Document* pDoc) { |
| 100 m_pDocument = pDoc; | 95 m_pDocument = pDoc; |
| 101 } | 96 } |
| 102 | 97 |
| 103 uint32_t CPDF_DataAvail::GetObjectSize(uint32_t objnum, FX_FILESIZE& offset) { | 98 uint32_t CPDF_DataAvail::GetObjectSize(uint32_t objnum, FX_FILESIZE& offset) { |
| 104 CPDF_Parser* pParser = m_pDocument->GetParser(); | 99 CPDF_Parser* pParser = m_pDocument->GetParser(); |
| 105 if (!pParser || !pParser->IsValidObjectNumber(objnum)) | 100 if (!pParser || !pParser->IsValidObjectNumber(objnum)) |
| 106 return 0; | 101 return 0; |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 if (bRet) | 224 if (bRet) |
| 230 m_objs_array.RemoveAll(); | 225 m_objs_array.RemoveAll(); |
| 231 return bRet; | 226 return bRet; |
| 232 } | 227 } |
| 233 | 228 |
| 234 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; | 229 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; |
| 235 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); | 230 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); |
| 236 if (bRet) { | 231 if (bRet) { |
| 237 int32_t iSize = m_arrayAcroforms.GetSize(); | 232 int32_t iSize = m_arrayAcroforms.GetSize(); |
| 238 for (int32_t i = 0; i < iSize; ++i) { | 233 for (int32_t i = 0; i < iSize; ++i) { |
| 239 m_arrayAcroforms.GetAt(i)->Release(); | 234 delete m_arrayAcroforms.GetAt(i); |
| 240 } | 235 } |
| 241 m_arrayAcroforms.RemoveAll(); | 236 m_arrayAcroforms.RemoveAll(); |
| 242 } else { | 237 } else { |
| 243 m_objs_array.RemoveAll(); | 238 m_objs_array.RemoveAll(); |
| 244 m_objs_array.Append(new_objs_array); | 239 m_objs_array.Append(new_objs_array); |
| 245 } | 240 } |
| 246 return bRet; | 241 return bRet; |
| 247 } | 242 } |
| 248 | 243 |
| 249 FX_BOOL CPDF_DataAvail::CheckAcroForm(DownloadHints* pHints) { | 244 FX_BOOL CPDF_DataAvail::CheckAcroForm(DownloadHints* pHints) { |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 if (m_docStatus == PDF_DATAAVAIL_ERROR) { | 398 if (m_docStatus == PDF_DATAAVAIL_ERROR) { |
| 404 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; | 399 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; |
| 405 return TRUE; | 400 return TRUE; |
| 406 } | 401 } |
| 407 | 402 |
| 408 if (m_Pos == m_dwFileLen) | 403 if (m_Pos == m_dwFileLen) |
| 409 m_docStatus = PDF_DATAAVAIL_ERROR; | 404 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 410 return FALSE; | 405 return FALSE; |
| 411 } | 406 } |
| 412 | 407 |
| 413 if (pInfo) | 408 delete pInfo; |
| 414 pInfo->Release(); | |
| 415 | |
| 416 m_docStatus = | 409 m_docStatus = |
| 417 (m_bHaveAcroForm ? PDF_DATAAVAIL_ACROFORM : PDF_DATAAVAIL_PAGETREE); | 410 (m_bHaveAcroForm ? PDF_DATAAVAIL_ACROFORM : PDF_DATAAVAIL_PAGETREE); |
| 418 | 411 |
| 419 return TRUE; | 412 return TRUE; |
| 420 } | 413 } |
| 421 | 414 |
| 422 FX_BOOL CPDF_DataAvail::CheckRoot(DownloadHints* pHints) { | 415 FX_BOOL CPDF_DataAvail::CheckRoot(DownloadHints* pHints) { |
| 423 FX_BOOL bExist = FALSE; | 416 FX_BOOL bExist = FALSE; |
| 424 m_pRoot = GetObject(m_dwRootObjNum, pHints, &bExist); | 417 m_pRoot = GetObject(m_dwRootObjNum, pHints, &bExist); |
| 425 if (!bExist) { | 418 if (!bExist) { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 | 495 |
| 503 CPDF_Array* pArray = ToArray(pObj); | 496 CPDF_Array* pArray = ToArray(pObj); |
| 504 if (pArray) { | 497 if (pArray) { |
| 505 for (CPDF_Object* pArrayObj : *pArray) { | 498 for (CPDF_Object* pArrayObj : *pArray) { |
| 506 if (CPDF_Reference* pRef = ToReference(pArrayObj)) | 499 if (CPDF_Reference* pRef = ToReference(pArrayObj)) |
| 507 UnavailObjList.Add(pRef->GetRefObjNum()); | 500 UnavailObjList.Add(pRef->GetRefObjNum()); |
| 508 } | 501 } |
| 509 } | 502 } |
| 510 | 503 |
| 511 if (!pObj->IsDictionary()) { | 504 if (!pObj->IsDictionary()) { |
| 512 pObj->Release(); | 505 delete pObj; |
| 513 continue; | 506 continue; |
| 514 } | 507 } |
| 515 | 508 |
| 516 CFX_ByteString type = pObj->GetDict()->GetStringFor("Type"); | 509 CFX_ByteString type = pObj->GetDict()->GetStringFor("Type"); |
| 517 if (type == "Pages") { | 510 if (type == "Pages") { |
| 518 m_PagesArray.Add(pObj); | 511 m_PagesArray.Add(pObj); |
| 519 continue; | 512 continue; |
| 520 } | 513 } |
| 521 pObj->Release(); | 514 delete pObj; |
| 522 } | 515 } |
| 523 | 516 |
| 524 m_PageObjList.RemoveAll(); | 517 m_PageObjList.RemoveAll(); |
| 525 if (UnavailObjList.GetSize()) { | 518 if (UnavailObjList.GetSize()) { |
| 526 m_PageObjList.Append(UnavailObjList); | 519 m_PageObjList.Append(UnavailObjList); |
| 527 return FALSE; | 520 return FALSE; |
| 528 } | 521 } |
| 529 | 522 |
| 530 uint32_t iPages = m_PagesArray.GetSize(); | 523 uint32_t iPages = m_PagesArray.GetSize(); |
| 531 for (uint32_t i = 0; i < iPages; i++) { | 524 for (uint32_t i = 0; i < iPages; i++) { |
| 532 CPDF_Object* pPages = m_PagesArray.GetAt(i); | 525 CPDF_Object* pPages = m_PagesArray.GetAt(i); |
| 533 if (!pPages) | 526 if (!pPages) |
| 534 continue; | 527 continue; |
| 535 | 528 |
| 536 if (!GetPageKids(m_pCurrentParser, pPages)) { | 529 if (!GetPageKids(m_pCurrentParser, pPages)) { |
| 537 pPages->Release(); | 530 delete pPages; |
| 538 while (++i < iPages) { | 531 while (++i < iPages) { |
| 539 pPages = m_PagesArray.GetAt(i); | 532 pPages = m_PagesArray.GetAt(i); |
| 540 pPages->Release(); | 533 delete pPages; |
| 541 } | 534 } |
| 542 m_PagesArray.RemoveAll(); | 535 m_PagesArray.RemoveAll(); |
| 543 | 536 |
| 544 m_docStatus = PDF_DATAAVAIL_ERROR; | 537 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 545 return FALSE; | 538 return FALSE; |
| 546 } | 539 } |
| 547 pPages->Release(); | 540 delete pPages; |
| 548 } | 541 } |
| 549 | 542 |
| 550 m_PagesArray.RemoveAll(); | 543 m_PagesArray.RemoveAll(); |
| 551 if (!m_PageObjList.GetSize()) | 544 if (!m_PageObjList.GetSize()) |
| 552 m_docStatus = PDF_DATAAVAIL_DONE; | 545 m_docStatus = PDF_DATAAVAIL_DONE; |
| 553 return TRUE; | 546 return TRUE; |
| 554 } | 547 } |
| 555 | 548 |
| 556 FX_BOOL CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) { | 549 FX_BOOL CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) { |
| 557 if (!pParser) { | 550 if (!pParser) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 592 | 585 |
| 593 if (!pPages) { | 586 if (!pPages) { |
| 594 if (m_docStatus == PDF_DATAAVAIL_ERROR) { | 587 if (m_docStatus == PDF_DATAAVAIL_ERROR) { |
| 595 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; | 588 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; |
| 596 return TRUE; | 589 return TRUE; |
| 597 } | 590 } |
| 598 return FALSE; | 591 return FALSE; |
| 599 } | 592 } |
| 600 | 593 |
| 601 if (!GetPageKids(m_pCurrentParser, pPages)) { | 594 if (!GetPageKids(m_pCurrentParser, pPages)) { |
| 602 pPages->Release(); | 595 delete pPages; |
| 603 m_docStatus = PDF_DATAAVAIL_ERROR; | 596 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 604 return FALSE; | 597 return FALSE; |
| 605 } | 598 } |
| 606 | 599 |
| 607 pPages->Release(); | 600 delete pPages; |
| 608 m_docStatus = PDF_DATAAVAIL_PAGE; | 601 m_docStatus = PDF_DATAAVAIL_PAGE; |
| 609 return TRUE; | 602 return TRUE; |
| 610 } | 603 } |
| 611 | 604 |
| 612 FX_BOOL CPDF_DataAvail::CheckHeader(DownloadHints* pHints) { | 605 FX_BOOL CPDF_DataAvail::CheckHeader(DownloadHints* pHints) { |
| 613 ASSERT(m_dwFileLen >= 0); | 606 ASSERT(m_dwFileLen >= 0); |
| 614 const uint32_t kReqSize = std::min(static_cast<uint32_t>(m_dwFileLen), 1024U); | 607 const uint32_t kReqSize = std::min(static_cast<uint32_t>(m_dwFileLen), 1024U); |
| 615 | 608 |
| 616 if (m_pFileAvail->IsDataAvail(0, kReqSize)) { | 609 if (m_pFileAvail->IsDataAvail(0, kReqSize)) { |
| 617 uint8_t buffer[1024]; | 610 uint8_t buffer[1024]; |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 768 return FALSE; | 761 return FALSE; |
| 769 } | 762 } |
| 770 | 763 |
| 771 if (!IsDataAvail(szHintStart, szHintLength, pHints)) | 764 if (!IsDataAvail(szHintStart, szHintLength, pHints)) |
| 772 return FALSE; | 765 return FALSE; |
| 773 | 766 |
| 774 m_syntaxParser.InitParser(m_pFileRead, m_dwHeaderOffset); | 767 m_syntaxParser.InitParser(m_pFileRead, m_dwHeaderOffset); |
| 775 | 768 |
| 776 std::unique_ptr<CPDF_HintTables> pHintTables( | 769 std::unique_ptr<CPDF_HintTables> pHintTables( |
| 777 new CPDF_HintTables(this, pDict)); | 770 new CPDF_HintTables(this, pDict)); |
| 778 std::unique_ptr<CPDF_Object, ReleaseDeleter<CPDF_Object>> pHintStream( | 771 std::unique_ptr<CPDF_Object> pHintStream( |
| 779 ParseIndirectObjectAt(szHintStart, 0)); | 772 ParseIndirectObjectAt(szHintStart, 0)); |
| 780 CPDF_Stream* pStream = ToStream(pHintStream.get()); | 773 CPDF_Stream* pStream = ToStream(pHintStream.get()); |
| 781 if (pStream && pHintTables->LoadHintStream(pStream)) | 774 if (pStream && pHintTables->LoadHintStream(pStream)) |
| 782 m_pHintTables = std::move(pHintTables); | 775 m_pHintTables = std::move(pHintTables); |
| 783 | 776 |
| 784 m_docStatus = PDF_DATAAVAIL_DONE; | 777 m_docStatus = PDF_DATAAVAIL_DONE; |
| 785 return TRUE; | 778 return TRUE; |
| 786 } | 779 } |
| 787 | 780 |
| 788 CPDF_Object* CPDF_DataAvail::ParseIndirectObjectAt( | 781 CPDF_Object* CPDF_DataAvail::ParseIndirectObjectAt( |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 956 m_Pos += m_parser.m_pSyntax->SavePos(); | 949 m_Pos += m_parser.m_pSyntax->SavePos(); |
| 957 return 0; | 950 return 0; |
| 958 } | 951 } |
| 959 | 952 |
| 960 CPDF_Dictionary* pDict = pObj->GetDict(); | 953 CPDF_Dictionary* pDict = pObj->GetDict(); |
| 961 CPDF_Name* pName = ToName(pDict ? pDict->GetObjectFor("Type") : nullptr); | 954 CPDF_Name* pName = ToName(pDict ? pDict->GetObjectFor("Type") : nullptr); |
| 962 if (pName) { | 955 if (pName) { |
| 963 if (pName->GetString() == "XRef") { | 956 if (pName->GetString() == "XRef") { |
| 964 m_Pos += m_parser.m_pSyntax->SavePos(); | 957 m_Pos += m_parser.m_pSyntax->SavePos(); |
| 965 xref_offset = pObj->GetDict()->GetIntegerFor("Prev"); | 958 xref_offset = pObj->GetDict()->GetIntegerFor("Prev"); |
| 966 pObj->Release(); | 959 delete pObj; |
| 967 return 1; | 960 return 1; |
| 968 } | 961 } |
| 969 } | 962 } |
| 970 pObj->Release(); | 963 delete pObj; |
| 971 return -1; | 964 return -1; |
| 972 } | 965 } |
| 973 pHints->AddSegment(m_Pos, req_size); | 966 pHints->AddSegment(m_Pos, req_size); |
| 974 return 0; | 967 return 0; |
| 975 } | 968 } |
| 976 | 969 |
| 977 void CPDF_DataAvail::SetStartOffset(FX_FILESIZE dwOffset) { | 970 void CPDF_DataAvail::SetStartOffset(FX_FILESIZE dwOffset) { |
| 978 m_Pos = dwOffset; | 971 m_Pos = dwOffset; |
| 979 } | 972 } |
| 980 | 973 |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1186 m_docStatus = PDF_DATAAVAIL_ERROR; | 1179 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 1187 return FALSE; | 1180 return FALSE; |
| 1188 } | 1181 } |
| 1189 | 1182 |
| 1190 if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize)) | 1183 if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize)) |
| 1191 return FALSE; | 1184 return FALSE; |
| 1192 | 1185 |
| 1193 ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, FALSE)); | 1186 ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, FALSE)); |
| 1194 m_syntaxParser.InitParser(file.get(), 0); | 1187 m_syntaxParser.InitParser(file.get(), 0); |
| 1195 | 1188 |
| 1196 std::unique_ptr<CPDF_Object, ReleaseDeleter<CPDF_Object>> pTrailer( | 1189 std::unique_ptr<CPDF_Object> pTrailer( |
| 1197 m_syntaxParser.GetObject(nullptr, 0, 0, true)); | 1190 m_syntaxParser.GetObject(nullptr, 0, 0, true)); |
| 1198 if (!pTrailer) { | 1191 if (!pTrailer) { |
| 1199 m_Pos += m_syntaxParser.SavePos(); | 1192 m_Pos += m_syntaxParser.SavePos(); |
| 1200 pHints->AddSegment(m_Pos, iTrailerSize); | 1193 pHints->AddSegment(m_Pos, iTrailerSize); |
| 1201 return FALSE; | 1194 return FALSE; |
| 1202 } | 1195 } |
| 1203 | 1196 |
| 1204 if (!pTrailer->IsDictionary()) | 1197 if (!pTrailer->IsDictionary()) |
| 1205 return FALSE; | 1198 return FALSE; |
| 1206 | 1199 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1271 if (!pPages) { | 1264 if (!pPages) { |
| 1272 if (m_docStatus == PDF_DATAAVAIL_ERROR) { | 1265 if (m_docStatus == PDF_DATAAVAIL_ERROR) { |
| 1273 m_docStatus = PDF_DATAAVAIL_ERROR; | 1266 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 1274 return FALSE; | 1267 return FALSE; |
| 1275 } | 1268 } |
| 1276 return FALSE; | 1269 return FALSE; |
| 1277 } | 1270 } |
| 1278 | 1271 |
| 1279 CPDF_Array* pArray = pPages->AsArray(); | 1272 CPDF_Array* pArray = pPages->AsArray(); |
| 1280 if (!pArray) { | 1273 if (!pArray) { |
| 1281 pPages->Release(); | 1274 delete pPages; |
| 1282 m_docStatus = PDF_DATAAVAIL_ERROR; | 1275 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 1283 return FALSE; | 1276 return FALSE; |
| 1284 } | 1277 } |
| 1285 | 1278 |
| 1286 pPageNode->m_type = PDF_PAGENODE_PAGES; | 1279 pPageNode->m_type = PDF_PAGENODE_PAGES; |
| 1287 for (size_t i = 0; i < pArray->GetCount(); ++i) { | 1280 for (size_t i = 0; i < pArray->GetCount(); ++i) { |
| 1288 CPDF_Reference* pKid = ToReference(pArray->GetObjectAt(i)); | 1281 CPDF_Reference* pKid = ToReference(pArray->GetObjectAt(i)); |
| 1289 if (!pKid) | 1282 if (!pKid) |
| 1290 continue; | 1283 continue; |
| 1291 | 1284 |
| 1292 PageNode* pNode = new PageNode(); | 1285 PageNode* pNode = new PageNode(); |
| 1293 pPageNode->m_childNode.Add(pNode); | 1286 pPageNode->m_childNode.Add(pNode); |
| 1294 pNode->m_dwPageNo = pKid->GetRefObjNum(); | 1287 pNode->m_dwPageNo = pKid->GetRefObjNum(); |
| 1295 } | 1288 } |
| 1296 pPages->Release(); | 1289 delete pPages; |
| 1297 return TRUE; | 1290 return TRUE; |
| 1298 } | 1291 } |
| 1299 | 1292 |
| 1300 FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(uint32_t dwPageNo, | 1293 FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(uint32_t dwPageNo, |
| 1301 PageNode* pPageNode, | 1294 PageNode* pPageNode, |
| 1302 DownloadHints* pHints) { | 1295 DownloadHints* pHints) { |
| 1303 FX_BOOL bExist = FALSE; | 1296 FX_BOOL bExist = FALSE; |
| 1304 CPDF_Object* pPage = GetObject(dwPageNo, pHints, &bExist); | 1297 CPDF_Object* pPage = GetObject(dwPageNo, pHints, &bExist); |
| 1305 if (!bExist) { | 1298 if (!bExist) { |
| 1306 m_docStatus = PDF_DATAAVAIL_ERROR; | 1299 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 1307 return FALSE; | 1300 return FALSE; |
| 1308 } | 1301 } |
| 1309 | 1302 |
| 1310 if (!pPage) { | 1303 if (!pPage) { |
| 1311 if (m_docStatus == PDF_DATAAVAIL_ERROR) | 1304 if (m_docStatus == PDF_DATAAVAIL_ERROR) |
| 1312 m_docStatus = PDF_DATAAVAIL_ERROR; | 1305 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 1313 return FALSE; | 1306 return FALSE; |
| 1314 } | 1307 } |
| 1315 | 1308 |
| 1316 if (pPage->IsArray()) { | 1309 if (pPage->IsArray()) { |
| 1317 pPageNode->m_dwPageNo = dwPageNo; | 1310 pPageNode->m_dwPageNo = dwPageNo; |
| 1318 pPageNode->m_type = PDF_PAGENODE_ARRAY; | 1311 pPageNode->m_type = PDF_PAGENODE_ARRAY; |
| 1319 pPage->Release(); | 1312 delete pPage; |
| 1320 return TRUE; | 1313 return TRUE; |
| 1321 } | 1314 } |
| 1322 | 1315 |
| 1323 if (!pPage->IsDictionary()) { | 1316 if (!pPage->IsDictionary()) { |
| 1324 pPage->Release(); | 1317 delete pPage; |
| 1325 m_docStatus = PDF_DATAAVAIL_ERROR; | 1318 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 1326 return FALSE; | 1319 return FALSE; |
| 1327 } | 1320 } |
| 1328 | 1321 |
| 1329 pPageNode->m_dwPageNo = dwPageNo; | 1322 pPageNode->m_dwPageNo = dwPageNo; |
| 1330 CPDF_Dictionary* pDict = pPage->GetDict(); | 1323 CPDF_Dictionary* pDict = pPage->GetDict(); |
| 1331 CFX_ByteString type = pDict->GetStringFor("Type"); | 1324 CFX_ByteString type = pDict->GetStringFor("Type"); |
| 1332 if (type == "Pages") { | 1325 if (type == "Pages") { |
| 1333 pPageNode->m_type = PDF_PAGENODE_PAGES; | 1326 pPageNode->m_type = PDF_PAGENODE_PAGES; |
| 1334 CPDF_Object* pKids = pDict->GetObjectFor("Kids"); | 1327 CPDF_Object* pKids = pDict->GetObjectFor("Kids"); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1355 pPageNode->m_childNode.Add(pNode); | 1348 pPageNode->m_childNode.Add(pNode); |
| 1356 pNode->m_dwPageNo = pKid->GetRefObjNum(); | 1349 pNode->m_dwPageNo = pKid->GetRefObjNum(); |
| 1357 } | 1350 } |
| 1358 } break; | 1351 } break; |
| 1359 default: | 1352 default: |
| 1360 break; | 1353 break; |
| 1361 } | 1354 } |
| 1362 } else if (type == "Page") { | 1355 } else if (type == "Page") { |
| 1363 pPageNode->m_type = PDF_PAGENODE_PAGE; | 1356 pPageNode->m_type = PDF_PAGENODE_PAGE; |
| 1364 } else { | 1357 } else { |
| 1365 pPage->Release(); | 1358 delete pPage; |
| 1366 m_docStatus = PDF_DATAAVAIL_ERROR; | 1359 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 1367 return FALSE; | 1360 return FALSE; |
| 1368 } | 1361 } |
| 1369 pPage->Release(); | 1362 delete pPage; |
| 1370 return TRUE; | 1363 return TRUE; |
| 1371 } | 1364 } |
| 1372 | 1365 |
| 1373 FX_BOOL CPDF_DataAvail::CheckPageNode(CPDF_DataAvail::PageNode& pageNodes, | 1366 FX_BOOL CPDF_DataAvail::CheckPageNode(CPDF_DataAvail::PageNode& pageNodes, |
| 1374 int32_t iPage, | 1367 int32_t iPage, |
| 1375 int32_t& iCount, | 1368 int32_t& iCount, |
| 1376 DownloadHints* pHints, | 1369 DownloadHints* pHints, |
| 1377 int level) { | 1370 int level) { |
| 1378 if (level >= kMaxPageRecursionDepth) | 1371 if (level >= kMaxPageRecursionDepth) |
| 1379 return FALSE; | 1372 return FALSE; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1447 if (!bExist) { | 1440 if (!bExist) { |
| 1448 m_docStatus = PDF_DATAAVAIL_ERROR; | 1441 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 1449 return FALSE; | 1442 return FALSE; |
| 1450 } | 1443 } |
| 1451 | 1444 |
| 1452 if (!pPages) | 1445 if (!pPages) |
| 1453 return FALSE; | 1446 return FALSE; |
| 1454 | 1447 |
| 1455 CPDF_Dictionary* pPagesDict = pPages->GetDict(); | 1448 CPDF_Dictionary* pPagesDict = pPages->GetDict(); |
| 1456 if (!pPagesDict) { | 1449 if (!pPagesDict) { |
| 1457 pPages->Release(); | 1450 delete pPages; |
| 1458 m_docStatus = PDF_DATAAVAIL_ERROR; | 1451 m_docStatus = PDF_DATAAVAIL_ERROR; |
| 1459 return FALSE; | 1452 return FALSE; |
| 1460 } | 1453 } |
| 1461 | 1454 |
| 1462 if (!pPagesDict->KeyExist("Kids")) { | 1455 if (!pPagesDict->KeyExist("Kids")) { |
| 1463 pPages->Release(); | 1456 delete pPages; |
| 1464 return TRUE; | 1457 return TRUE; |
| 1465 } | 1458 } |
| 1466 | 1459 |
| 1467 int count = pPagesDict->GetIntegerFor("Count"); | 1460 int count = pPagesDict->GetIntegerFor("Count"); |
| 1468 if (count > 0) { | 1461 if (count > 0) { |
| 1469 pPages->Release(); | 1462 delete pPages; |
| 1470 return TRUE; | 1463 return TRUE; |
| 1471 } | 1464 } |
| 1472 | 1465 |
| 1473 pPages->Release(); | 1466 delete pPages; |
| 1474 return FALSE; | 1467 return FALSE; |
| 1475 } | 1468 } |
| 1476 | 1469 |
| 1477 FX_BOOL CPDF_DataAvail::LoadDocPages(DownloadHints* pHints) { | 1470 FX_BOOL CPDF_DataAvail::LoadDocPages(DownloadHints* pHints) { |
| 1478 if (!CheckUnkownPageNode(m_PagesObjNum, &m_pageNodes, pHints)) | 1471 if (!CheckUnkownPageNode(m_PagesObjNum, &m_pageNodes, pHints)) |
| 1479 return FALSE; | 1472 return FALSE; |
| 1480 | 1473 |
| 1481 if (CheckPageCount(pHints)) { | 1474 if (CheckPageCount(pHints)) { |
| 1482 m_docStatus = PDF_DATAAVAIL_PAGE; | 1475 m_docStatus = PDF_DATAAVAIL_PAGE; |
| 1483 return TRUE; | 1476 return TRUE; |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1835 return FormAvailable; | 1828 return FormAvailable; |
| 1836 } | 1829 } |
| 1837 | 1830 |
| 1838 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} | 1831 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} |
| 1839 | 1832 |
| 1840 CPDF_DataAvail::PageNode::~PageNode() { | 1833 CPDF_DataAvail::PageNode::~PageNode() { |
| 1841 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) | 1834 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) |
| 1842 delete m_childNode[i]; | 1835 delete m_childNode[i]; |
| 1843 m_childNode.RemoveAll(); | 1836 m_childNode.RemoveAll(); |
| 1844 } | 1837 } |
| OLD | NEW |