Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Side by Side Diff: core/fpdfapi/parser/cpdf_data_avail.cpp

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

Powered by Google App Engine
This is Rietveld 408576698