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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 | 83 |
84 CPDF_DataAvail::~CPDF_DataAvail() { | 84 CPDF_DataAvail::~CPDF_DataAvail() { |
85 m_pHintTables.reset(); | 85 m_pHintTables.reset(); |
86 if (m_pLinearized) | 86 delete m_pLinearized; |
87 m_pLinearized->Release(); | 87 delete m_pRoot; |
88 | 88 delete m_pTrailer; |
89 if (m_pRoot) | |
90 m_pRoot->Release(); | |
91 | |
92 if (m_pTrailer) | |
93 m_pTrailer->Release(); | |
94 | 89 |
95 for (CPDF_Object* pObject : m_arrayAcroforms) | 90 for (CPDF_Object* pObject : m_arrayAcroforms) |
96 pObject->Release(); | 91 delete pObject; |
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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 return true; | 218 return true; |
224 } | 219 } |
225 | 220 |
226 std::vector<CPDF_Object*> new_objs_array; | 221 std::vector<CPDF_Object*> new_objs_array; |
227 if (!AreObjectsAvailable(m_objs_array, false, pHints, new_objs_array)) { | 222 if (!AreObjectsAvailable(m_objs_array, false, pHints, new_objs_array)) { |
228 m_objs_array = new_objs_array; | 223 m_objs_array = new_objs_array; |
229 return false; | 224 return false; |
230 } | 225 } |
231 | 226 |
232 for (CPDF_Object* pObject : m_arrayAcroforms) | 227 for (CPDF_Object* pObject : m_arrayAcroforms) |
233 pObject->Release(); | 228 delete pObject; |
234 | 229 |
235 m_arrayAcroforms.clear(); | 230 m_arrayAcroforms.clear(); |
236 return true; | 231 return true; |
237 } | 232 } |
238 | 233 |
239 bool CPDF_DataAvail::CheckAcroForm(DownloadHints* pHints) { | 234 bool CPDF_DataAvail::CheckAcroForm(DownloadHints* pHints) { |
240 bool bExist = false; | 235 bool bExist = false; |
241 m_pAcroForm = GetObject(m_dwAcroFormObjNum, pHints, &bExist); | 236 m_pAcroForm = GetObject(m_dwAcroFormObjNum, pHints, &bExist); |
242 if (!bExist) { | 237 if (!bExist) { |
243 m_docStatus = PDF_DATAAVAIL_PAGETREE; | 238 m_docStatus = PDF_DATAAVAIL_PAGETREE; |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 if (m_docStatus == PDF_DATAAVAIL_ERROR) { | 388 if (m_docStatus == PDF_DATAAVAIL_ERROR) { |
394 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; | 389 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; |
395 return true; | 390 return true; |
396 } | 391 } |
397 | 392 |
398 if (m_Pos == m_dwFileLen) | 393 if (m_Pos == m_dwFileLen) |
399 m_docStatus = PDF_DATAAVAIL_ERROR; | 394 m_docStatus = PDF_DATAAVAIL_ERROR; |
400 return false; | 395 return false; |
401 } | 396 } |
402 | 397 |
403 if (pInfo) | 398 delete pInfo; |
404 pInfo->Release(); | |
405 | |
406 m_docStatus = | 399 m_docStatus = |
407 (m_bHaveAcroForm ? PDF_DATAAVAIL_ACROFORM : PDF_DATAAVAIL_PAGETREE); | 400 (m_bHaveAcroForm ? PDF_DATAAVAIL_ACROFORM : PDF_DATAAVAIL_PAGETREE); |
408 | 401 |
409 return true; | 402 return true; |
410 } | 403 } |
411 | 404 |
412 bool CPDF_DataAvail::CheckRoot(DownloadHints* pHints) { | 405 bool CPDF_DataAvail::CheckRoot(DownloadHints* pHints) { |
413 bool bExist = false; | 406 bool bExist = false; |
414 m_pRoot = GetObject(m_dwRootObjNum, pHints, &bExist); | 407 m_pRoot = GetObject(m_dwRootObjNum, pHints, &bExist); |
415 if (!bExist) { | 408 if (!bExist) { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 | 485 |
493 CPDF_Array* pArray = ToArray(pObj); | 486 CPDF_Array* pArray = ToArray(pObj); |
494 if (pArray) { | 487 if (pArray) { |
495 for (CPDF_Object* pArrayObj : *pArray) { | 488 for (CPDF_Object* pArrayObj : *pArray) { |
496 if (CPDF_Reference* pRef = ToReference(pArrayObj)) | 489 if (CPDF_Reference* pRef = ToReference(pArrayObj)) |
497 UnavailObjList.Add(pRef->GetRefObjNum()); | 490 UnavailObjList.Add(pRef->GetRefObjNum()); |
498 } | 491 } |
499 } | 492 } |
500 | 493 |
501 if (!pObj->IsDictionary()) { | 494 if (!pObj->IsDictionary()) { |
502 pObj->Release(); | 495 delete pObj; |
503 continue; | 496 continue; |
504 } | 497 } |
505 | 498 |
506 CFX_ByteString type = pObj->GetDict()->GetStringFor("Type"); | 499 CFX_ByteString type = pObj->GetDict()->GetStringFor("Type"); |
507 if (type == "Pages") { | 500 if (type == "Pages") { |
508 m_PagesArray.push_back(pObj); | 501 m_PagesArray.push_back(pObj); |
509 continue; | 502 continue; |
510 } | 503 } |
511 pObj->Release(); | 504 delete pObj; |
512 } | 505 } |
513 | 506 |
514 m_PageObjList.RemoveAll(); | 507 m_PageObjList.RemoveAll(); |
515 if (UnavailObjList.GetSize()) { | 508 if (UnavailObjList.GetSize()) { |
516 m_PageObjList.Append(UnavailObjList); | 509 m_PageObjList.Append(UnavailObjList); |
517 return false; | 510 return false; |
518 } | 511 } |
519 | 512 |
520 uint32_t iPages = m_PagesArray.size(); | 513 uint32_t iPages = m_PagesArray.size(); |
521 for (uint32_t i = 0; i < iPages; i++) { | 514 for (uint32_t i = 0; i < iPages; i++) { |
522 CPDF_Object* pPages = m_PagesArray[i]; | 515 CPDF_Object* pPages = m_PagesArray[i]; |
523 if (!pPages) | 516 if (!pPages) |
524 continue; | 517 continue; |
525 | 518 |
526 if (!GetPageKids(m_pCurrentParser, pPages)) { | 519 if (!GetPageKids(m_pCurrentParser, pPages)) { |
527 pPages->Release(); | 520 delete pPages; |
528 while (++i < iPages) | 521 while (++i < iPages) |
529 m_PagesArray[i]->Release(); | 522 delete m_PagesArray[i]; |
530 | 523 |
531 m_PagesArray.clear(); | 524 m_PagesArray.clear(); |
532 m_docStatus = PDF_DATAAVAIL_ERROR; | 525 m_docStatus = PDF_DATAAVAIL_ERROR; |
533 return false; | 526 return false; |
534 } | 527 } |
535 pPages->Release(); | 528 delete pPages; |
536 } | 529 } |
537 | 530 |
538 m_PagesArray.clear(); | 531 m_PagesArray.clear(); |
539 if (!m_PageObjList.GetSize()) | 532 if (!m_PageObjList.GetSize()) |
540 m_docStatus = PDF_DATAAVAIL_DONE; | 533 m_docStatus = PDF_DATAAVAIL_DONE; |
541 return true; | 534 return true; |
542 } | 535 } |
543 | 536 |
544 bool CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) { | 537 bool CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) { |
545 if (!pParser) { | 538 if (!pParser) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 | 573 |
581 if (!pPages) { | 574 if (!pPages) { |
582 if (m_docStatus == PDF_DATAAVAIL_ERROR) { | 575 if (m_docStatus == PDF_DATAAVAIL_ERROR) { |
583 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; | 576 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; |
584 return true; | 577 return true; |
585 } | 578 } |
586 return false; | 579 return false; |
587 } | 580 } |
588 | 581 |
589 if (!GetPageKids(m_pCurrentParser, pPages)) { | 582 if (!GetPageKids(m_pCurrentParser, pPages)) { |
590 pPages->Release(); | 583 delete pPages; |
591 m_docStatus = PDF_DATAAVAIL_ERROR; | 584 m_docStatus = PDF_DATAAVAIL_ERROR; |
592 return false; | 585 return false; |
593 } | 586 } |
594 | 587 |
595 pPages->Release(); | 588 delete pPages; |
596 m_docStatus = PDF_DATAAVAIL_PAGE; | 589 m_docStatus = PDF_DATAAVAIL_PAGE; |
597 return true; | 590 return true; |
598 } | 591 } |
599 | 592 |
600 bool CPDF_DataAvail::CheckHeader(DownloadHints* pHints) { | 593 bool CPDF_DataAvail::CheckHeader(DownloadHints* pHints) { |
601 ASSERT(m_dwFileLen >= 0); | 594 ASSERT(m_dwFileLen >= 0); |
602 const uint32_t kReqSize = std::min(static_cast<uint32_t>(m_dwFileLen), 1024U); | 595 const uint32_t kReqSize = std::min(static_cast<uint32_t>(m_dwFileLen), 1024U); |
603 | 596 |
604 if (m_pFileAvail->IsDataAvail(0, kReqSize)) { | 597 if (m_pFileAvail->IsDataAvail(0, kReqSize)) { |
605 uint8_t buffer[1024]; | 598 uint8_t buffer[1024]; |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
756 return false; | 749 return false; |
757 } | 750 } |
758 | 751 |
759 if (!IsDataAvail(szHintStart, szHintLength, pHints)) | 752 if (!IsDataAvail(szHintStart, szHintLength, pHints)) |
760 return false; | 753 return false; |
761 | 754 |
762 m_syntaxParser.InitParser(m_pFileRead, m_dwHeaderOffset); | 755 m_syntaxParser.InitParser(m_pFileRead, m_dwHeaderOffset); |
763 | 756 |
764 std::unique_ptr<CPDF_HintTables> pHintTables( | 757 std::unique_ptr<CPDF_HintTables> pHintTables( |
765 new CPDF_HintTables(this, pDict)); | 758 new CPDF_HintTables(this, pDict)); |
766 std::unique_ptr<CPDF_Object, ReleaseDeleter<CPDF_Object>> pHintStream( | 759 std::unique_ptr<CPDF_Object> pHintStream( |
767 ParseIndirectObjectAt(szHintStart, 0)); | 760 ParseIndirectObjectAt(szHintStart, 0)); |
768 CPDF_Stream* pStream = ToStream(pHintStream.get()); | 761 CPDF_Stream* pStream = ToStream(pHintStream.get()); |
769 if (pStream && pHintTables->LoadHintStream(pStream)) | 762 if (pStream && pHintTables->LoadHintStream(pStream)) |
770 m_pHintTables = std::move(pHintTables); | 763 m_pHintTables = std::move(pHintTables); |
771 | 764 |
772 m_docStatus = PDF_DATAAVAIL_DONE; | 765 m_docStatus = PDF_DATAAVAIL_DONE; |
773 return true; | 766 return true; |
774 } | 767 } |
775 | 768 |
776 CPDF_Object* CPDF_DataAvail::ParseIndirectObjectAt( | 769 CPDF_Object* CPDF_DataAvail::ParseIndirectObjectAt( |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
944 m_Pos += m_parser.m_pSyntax->SavePos(); | 937 m_Pos += m_parser.m_pSyntax->SavePos(); |
945 return 0; | 938 return 0; |
946 } | 939 } |
947 | 940 |
948 CPDF_Dictionary* pDict = pObj->GetDict(); | 941 CPDF_Dictionary* pDict = pObj->GetDict(); |
949 CPDF_Name* pName = ToName(pDict ? pDict->GetObjectFor("Type") : nullptr); | 942 CPDF_Name* pName = ToName(pDict ? pDict->GetObjectFor("Type") : nullptr); |
950 if (pName) { | 943 if (pName) { |
951 if (pName->GetString() == "XRef") { | 944 if (pName->GetString() == "XRef") { |
952 m_Pos += m_parser.m_pSyntax->SavePos(); | 945 m_Pos += m_parser.m_pSyntax->SavePos(); |
953 xref_offset = pObj->GetDict()->GetIntegerFor("Prev"); | 946 xref_offset = pObj->GetDict()->GetIntegerFor("Prev"); |
954 pObj->Release(); | 947 delete pObj; |
955 return 1; | 948 return 1; |
956 } | 949 } |
957 } | 950 } |
958 pObj->Release(); | 951 delete pObj; |
959 return -1; | 952 return -1; |
960 } | 953 } |
961 pHints->AddSegment(m_Pos, req_size); | 954 pHints->AddSegment(m_Pos, req_size); |
962 return 0; | 955 return 0; |
963 } | 956 } |
964 | 957 |
965 void CPDF_DataAvail::SetStartOffset(FX_FILESIZE dwOffset) { | 958 void CPDF_DataAvail::SetStartOffset(FX_FILESIZE dwOffset) { |
966 m_Pos = dwOffset; | 959 m_Pos = dwOffset; |
967 } | 960 } |
968 | 961 |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1174 m_docStatus = PDF_DATAAVAIL_ERROR; | 1167 m_docStatus = PDF_DATAAVAIL_ERROR; |
1175 return false; | 1168 return false; |
1176 } | 1169 } |
1177 | 1170 |
1178 if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize)) | 1171 if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize)) |
1179 return false; | 1172 return false; |
1180 | 1173 |
1181 ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, false)); | 1174 ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, false)); |
1182 m_syntaxParser.InitParser(file.get(), 0); | 1175 m_syntaxParser.InitParser(file.get(), 0); |
1183 | 1176 |
1184 std::unique_ptr<CPDF_Object, ReleaseDeleter<CPDF_Object>> pTrailer( | 1177 std::unique_ptr<CPDF_Object> pTrailer( |
1185 m_syntaxParser.GetObject(nullptr, 0, 0, true)); | 1178 m_syntaxParser.GetObject(nullptr, 0, 0, true)); |
1186 if (!pTrailer) { | 1179 if (!pTrailer) { |
1187 m_Pos += m_syntaxParser.SavePos(); | 1180 m_Pos += m_syntaxParser.SavePos(); |
1188 pHints->AddSegment(m_Pos, iTrailerSize); | 1181 pHints->AddSegment(m_Pos, iTrailerSize); |
1189 return false; | 1182 return false; |
1190 } | 1183 } |
1191 | 1184 |
1192 if (!pTrailer->IsDictionary()) | 1185 if (!pTrailer->IsDictionary()) |
1193 return false; | 1186 return false; |
1194 | 1187 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1259 if (!pPages) { | 1252 if (!pPages) { |
1260 if (m_docStatus == PDF_DATAAVAIL_ERROR) { | 1253 if (m_docStatus == PDF_DATAAVAIL_ERROR) { |
1261 m_docStatus = PDF_DATAAVAIL_ERROR; | 1254 m_docStatus = PDF_DATAAVAIL_ERROR; |
1262 return false; | 1255 return false; |
1263 } | 1256 } |
1264 return false; | 1257 return false; |
1265 } | 1258 } |
1266 | 1259 |
1267 CPDF_Array* pArray = pPages->AsArray(); | 1260 CPDF_Array* pArray = pPages->AsArray(); |
1268 if (!pArray) { | 1261 if (!pArray) { |
1269 pPages->Release(); | 1262 delete pPages; |
1270 m_docStatus = PDF_DATAAVAIL_ERROR; | 1263 m_docStatus = PDF_DATAAVAIL_ERROR; |
1271 return false; | 1264 return false; |
1272 } | 1265 } |
1273 | 1266 |
1274 pPageNode->m_type = PDF_PAGENODE_PAGES; | 1267 pPageNode->m_type = PDF_PAGENODE_PAGES; |
1275 for (size_t i = 0; i < pArray->GetCount(); ++i) { | 1268 for (size_t i = 0; i < pArray->GetCount(); ++i) { |
1276 CPDF_Reference* pKid = ToReference(pArray->GetObjectAt(i)); | 1269 CPDF_Reference* pKid = ToReference(pArray->GetObjectAt(i)); |
1277 if (!pKid) | 1270 if (!pKid) |
1278 continue; | 1271 continue; |
1279 | 1272 |
1280 PageNode* pNode = new PageNode(); | 1273 PageNode* pNode = new PageNode(); |
1281 pPageNode->m_childNode.Add(pNode); | 1274 pPageNode->m_childNode.Add(pNode); |
1282 pNode->m_dwPageNo = pKid->GetRefObjNum(); | 1275 pNode->m_dwPageNo = pKid->GetRefObjNum(); |
1283 } | 1276 } |
1284 pPages->Release(); | 1277 delete pPages; |
1285 return true; | 1278 return true; |
1286 } | 1279 } |
1287 | 1280 |
1288 bool CPDF_DataAvail::CheckUnkownPageNode(uint32_t dwPageNo, | 1281 bool CPDF_DataAvail::CheckUnkownPageNode(uint32_t dwPageNo, |
1289 PageNode* pPageNode, | 1282 PageNode* pPageNode, |
1290 DownloadHints* pHints) { | 1283 DownloadHints* pHints) { |
1291 bool bExist = false; | 1284 bool bExist = false; |
1292 CPDF_Object* pPage = GetObject(dwPageNo, pHints, &bExist); | 1285 CPDF_Object* pPage = GetObject(dwPageNo, pHints, &bExist); |
1293 if (!bExist) { | 1286 if (!bExist) { |
1294 m_docStatus = PDF_DATAAVAIL_ERROR; | 1287 m_docStatus = PDF_DATAAVAIL_ERROR; |
1295 return false; | 1288 return false; |
1296 } | 1289 } |
1297 | 1290 |
1298 if (!pPage) { | 1291 if (!pPage) { |
1299 if (m_docStatus == PDF_DATAAVAIL_ERROR) | 1292 if (m_docStatus == PDF_DATAAVAIL_ERROR) |
1300 m_docStatus = PDF_DATAAVAIL_ERROR; | 1293 m_docStatus = PDF_DATAAVAIL_ERROR; |
1301 return false; | 1294 return false; |
1302 } | 1295 } |
1303 | 1296 |
1304 if (pPage->IsArray()) { | 1297 if (pPage->IsArray()) { |
1305 pPageNode->m_dwPageNo = dwPageNo; | 1298 pPageNode->m_dwPageNo = dwPageNo; |
1306 pPageNode->m_type = PDF_PAGENODE_ARRAY; | 1299 pPageNode->m_type = PDF_PAGENODE_ARRAY; |
1307 pPage->Release(); | 1300 delete pPage; |
1308 return true; | 1301 return true; |
1309 } | 1302 } |
1310 | 1303 |
1311 if (!pPage->IsDictionary()) { | 1304 if (!pPage->IsDictionary()) { |
1312 pPage->Release(); | 1305 delete pPage; |
1313 m_docStatus = PDF_DATAAVAIL_ERROR; | 1306 m_docStatus = PDF_DATAAVAIL_ERROR; |
1314 return false; | 1307 return false; |
1315 } | 1308 } |
1316 | 1309 |
1317 pPageNode->m_dwPageNo = dwPageNo; | 1310 pPageNode->m_dwPageNo = dwPageNo; |
1318 CPDF_Dictionary* pDict = pPage->GetDict(); | 1311 CPDF_Dictionary* pDict = pPage->GetDict(); |
1319 CFX_ByteString type = pDict->GetStringFor("Type"); | 1312 CFX_ByteString type = pDict->GetStringFor("Type"); |
1320 if (type == "Pages") { | 1313 if (type == "Pages") { |
1321 pPageNode->m_type = PDF_PAGENODE_PAGES; | 1314 pPageNode->m_type = PDF_PAGENODE_PAGES; |
1322 CPDF_Object* pKids = pDict->GetObjectFor("Kids"); | 1315 CPDF_Object* pKids = pDict->GetObjectFor("Kids"); |
(...skipping 20 matching lines...) Expand all Loading... |
1343 pPageNode->m_childNode.Add(pNode); | 1336 pPageNode->m_childNode.Add(pNode); |
1344 pNode->m_dwPageNo = pKid->GetRefObjNum(); | 1337 pNode->m_dwPageNo = pKid->GetRefObjNum(); |
1345 } | 1338 } |
1346 } break; | 1339 } break; |
1347 default: | 1340 default: |
1348 break; | 1341 break; |
1349 } | 1342 } |
1350 } else if (type == "Page") { | 1343 } else if (type == "Page") { |
1351 pPageNode->m_type = PDF_PAGENODE_PAGE; | 1344 pPageNode->m_type = PDF_PAGENODE_PAGE; |
1352 } else { | 1345 } else { |
1353 pPage->Release(); | 1346 delete pPage; |
1354 m_docStatus = PDF_DATAAVAIL_ERROR; | 1347 m_docStatus = PDF_DATAAVAIL_ERROR; |
1355 return false; | 1348 return false; |
1356 } | 1349 } |
1357 pPage->Release(); | 1350 delete pPage; |
1358 return true; | 1351 return true; |
1359 } | 1352 } |
1360 | 1353 |
1361 bool CPDF_DataAvail::CheckPageNode(CPDF_DataAvail::PageNode& pageNodes, | 1354 bool CPDF_DataAvail::CheckPageNode(CPDF_DataAvail::PageNode& pageNodes, |
1362 int32_t iPage, | 1355 int32_t iPage, |
1363 int32_t& iCount, | 1356 int32_t& iCount, |
1364 DownloadHints* pHints, | 1357 DownloadHints* pHints, |
1365 int level) { | 1358 int level) { |
1366 if (level >= kMaxPageRecursionDepth) | 1359 if (level >= kMaxPageRecursionDepth) |
1367 return false; | 1360 return false; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1435 if (!bExist) { | 1428 if (!bExist) { |
1436 m_docStatus = PDF_DATAAVAIL_ERROR; | 1429 m_docStatus = PDF_DATAAVAIL_ERROR; |
1437 return false; | 1430 return false; |
1438 } | 1431 } |
1439 | 1432 |
1440 if (!pPages) | 1433 if (!pPages) |
1441 return false; | 1434 return false; |
1442 | 1435 |
1443 CPDF_Dictionary* pPagesDict = pPages->GetDict(); | 1436 CPDF_Dictionary* pPagesDict = pPages->GetDict(); |
1444 if (!pPagesDict) { | 1437 if (!pPagesDict) { |
1445 pPages->Release(); | 1438 delete pPages; |
1446 m_docStatus = PDF_DATAAVAIL_ERROR; | 1439 m_docStatus = PDF_DATAAVAIL_ERROR; |
1447 return false; | 1440 return false; |
1448 } | 1441 } |
1449 | 1442 |
1450 if (!pPagesDict->KeyExist("Kids")) { | 1443 if (!pPagesDict->KeyExist("Kids")) { |
1451 pPages->Release(); | 1444 delete pPages; |
1452 return true; | 1445 return true; |
1453 } | 1446 } |
1454 | 1447 |
1455 int count = pPagesDict->GetIntegerFor("Count"); | 1448 int count = pPagesDict->GetIntegerFor("Count"); |
1456 if (count > 0) { | 1449 if (count > 0) { |
1457 pPages->Release(); | 1450 delete pPages; |
1458 return true; | 1451 return true; |
1459 } | 1452 } |
1460 | 1453 |
1461 pPages->Release(); | 1454 delete pPages; |
1462 return false; | 1455 return false; |
1463 } | 1456 } |
1464 | 1457 |
1465 bool CPDF_DataAvail::LoadDocPages(DownloadHints* pHints) { | 1458 bool CPDF_DataAvail::LoadDocPages(DownloadHints* pHints) { |
1466 if (!CheckUnkownPageNode(m_PagesObjNum, &m_pageNodes, pHints)) | 1459 if (!CheckUnkownPageNode(m_PagesObjNum, &m_pageNodes, pHints)) |
1467 return false; | 1460 return false; |
1468 | 1461 |
1469 if (CheckPageCount(pHints)) { | 1462 if (CheckPageCount(pHints)) { |
1470 m_docStatus = PDF_DATAAVAIL_PAGE; | 1463 m_docStatus = PDF_DATAAVAIL_PAGE; |
1471 return true; | 1464 return true; |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1816 return FormAvailable; | 1809 return FormAvailable; |
1817 } | 1810 } |
1818 | 1811 |
1819 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} | 1812 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} |
1820 | 1813 |
1821 CPDF_DataAvail::PageNode::~PageNode() { | 1814 CPDF_DataAvail::PageNode::~PageNode() { |
1822 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) | 1815 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) |
1823 delete m_childNode[i]; | 1816 delete m_childNode[i]; |
1824 m_childNode.RemoveAll(); | 1817 m_childNode.RemoveAll(); |
1825 } | 1818 } |
OLD | NEW |