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

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

Issue 2294383003: Use unsigned page indexes in CPDF_HintTables. (Closed)
Patch Set: more safe math Created 4 years, 3 months 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 | « no previous file | core/fpdfapi/fpdf_parser/cpdf_hint_tables.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/fpdf_parser/include/cpdf_data_avail.h" 7 #include "core/fpdfapi/fpdf_parser/include/cpdf_data_avail.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 m_docStatus = PDF_DATAAVAIL_ERROR; 472 m_docStatus = PDF_DATAAVAIL_ERROR;
473 return FALSE; 473 return FALSE;
474 } 474 }
475 475
476 m_PagesObjNum = pRef->GetRefObjNum(); 476 m_PagesObjNum = pRef->GetRefObjNum();
477 m_pCurrentParser = m_pDocument->GetParser(); 477 m_pCurrentParser = m_pDocument->GetParser();
478 m_docStatus = PDF_DATAAVAIL_PAGETREE; 478 m_docStatus = PDF_DATAAVAIL_PAGETREE;
479 return TRUE; 479 return TRUE;
480 } 480 }
481 481
482 bool CPDF_DataAvail::IsFirstCheck(int iPage) { 482 bool CPDF_DataAvail::IsFirstCheck(uint32_t dwPage) {
483 return m_pageMapCheckState.insert(iPage).second; 483 return m_pageMapCheckState.insert(dwPage).second;
484 } 484 }
485 485
486 void CPDF_DataAvail::ResetFirstCheck(int iPage) { 486 void CPDF_DataAvail::ResetFirstCheck(uint32_t dwPage) {
487 m_pageMapCheckState.erase(iPage); 487 m_pageMapCheckState.erase(dwPage);
488 } 488 }
489 489
490 FX_BOOL CPDF_DataAvail::CheckPage(DownloadHints* pHints) { 490 FX_BOOL CPDF_DataAvail::CheckPage(DownloadHints* pHints) {
491 uint32_t iPageObjs = m_PageObjList.GetSize(); 491 uint32_t iPageObjs = m_PageObjList.GetSize();
492 CFX_ArrayTemplate<uint32_t> UnavailObjList; 492 CFX_ArrayTemplate<uint32_t> UnavailObjList;
493 for (uint32_t i = 0; i < iPageObjs; ++i) { 493 for (uint32_t i = 0; i < iPageObjs; ++i) {
494 uint32_t dwPageObjNum = m_PageObjList.GetAt(i); 494 uint32_t dwPageObjNum = m_PageObjList.GetAt(i);
495 FX_BOOL bExist = FALSE; 495 FX_BOOL bExist = FALSE;
496 CPDF_Object* pObj = GetObject(dwPageObjNum, pHints, &bExist); 496 CPDF_Object* pObj = GetObject(dwPageObjNum, pHints, &bExist);
497 if (!pObj) { 497 if (!pObj) {
(...skipping 730 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 return TRUE; 1228 return TRUE;
1229 } 1229 }
1230 m_dwPrevXRefOffset = 0; 1230 m_dwPrevXRefOffset = 0;
1231 m_docStatus = PDF_DATAAVAIL_TRAILER_APPEND; 1231 m_docStatus = PDF_DATAAVAIL_TRAILER_APPEND;
1232 return TRUE; 1232 return TRUE;
1233 } 1233 }
1234 pHints->AddSegment(m_Pos, iTrailerSize); 1234 pHints->AddSegment(m_Pos, iTrailerSize);
1235 return FALSE; 1235 return FALSE;
1236 } 1236 }
1237 1237
1238 FX_BOOL CPDF_DataAvail::CheckPage(int32_t iPage, DownloadHints* pHints) { 1238 FX_BOOL CPDF_DataAvail::CheckPage(uint32_t dwPage, DownloadHints* pHints) {
1239 while (TRUE) { 1239 while (TRUE) {
1240 switch (m_docStatus) { 1240 switch (m_docStatus) {
1241 case PDF_DATAAVAIL_PAGETREE: 1241 case PDF_DATAAVAIL_PAGETREE:
1242 if (!LoadDocPages(pHints)) 1242 if (!LoadDocPages(pHints))
1243 return FALSE; 1243 return FALSE;
1244 break; 1244 break;
1245 case PDF_DATAAVAIL_PAGE: 1245 case PDF_DATAAVAIL_PAGE:
1246 if (!LoadDocPage(iPage, pHints)) 1246 if (!LoadDocPage(dwPage, pHints))
1247 return FALSE; 1247 return FALSE;
1248 break; 1248 break;
1249 case PDF_DATAAVAIL_ERROR: 1249 case PDF_DATAAVAIL_ERROR:
1250 return LoadAllFile(pHints); 1250 return LoadAllFile(pHints);
1251 default: 1251 default:
1252 m_bPagesTreeLoad = TRUE; 1252 m_bPagesTreeLoad = TRUE;
1253 m_bPagesLoad = TRUE; 1253 m_bPagesLoad = TRUE;
1254 m_bCurPageDictLoadOK = TRUE; 1254 m_bCurPageDictLoadOK = TRUE;
1255 m_docStatus = PDF_DATAAVAIL_PAGE; 1255 m_docStatus = PDF_DATAAVAIL_PAGE;
1256 return TRUE; 1256 return TRUE;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 } 1413 }
1414 1414
1415 if (iPage == iCount) { 1415 if (iPage == iCount) {
1416 m_docStatus = PDF_DATAAVAIL_DONE; 1416 m_docStatus = PDF_DATAAVAIL_DONE;
1417 return TRUE; 1417 return TRUE;
1418 } 1418 }
1419 } 1419 }
1420 return TRUE; 1420 return TRUE;
1421 } 1421 }
1422 1422
1423 FX_BOOL CPDF_DataAvail::LoadDocPage(int32_t iPage, DownloadHints* pHints) { 1423 FX_BOOL CPDF_DataAvail::LoadDocPage(uint32_t dwPage, DownloadHints* pHints) {
1424 FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage);
1425 int32_t iPage = safePage.ValueOrDie();
1424 if (m_pDocument->GetPageCount() <= iPage || 1426 if (m_pDocument->GetPageCount() <= iPage ||
1425 m_pDocument->m_PageList.GetAt(iPage)) { 1427 m_pDocument->m_PageList.GetAt(iPage)) {
1426 m_docStatus = PDF_DATAAVAIL_DONE; 1428 m_docStatus = PDF_DATAAVAIL_DONE;
1427 return TRUE; 1429 return TRUE;
1428 } 1430 }
1429 1431
1430 if (m_pageNodes.m_type == PDF_PAGENODE_PAGE) { 1432 if (m_pageNodes.m_type == PDF_PAGENODE_PAGE) {
1431 if (iPage == 0) { 1433 if (iPage == 0) {
1432 m_docStatus = PDF_DATAAVAIL_DONE; 1434 m_docStatus = PDF_DATAAVAIL_DONE;
1433 return TRUE; 1435 return TRUE;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1524 if (!PreparePageItem()) 1526 if (!PreparePageItem())
1525 return DataNotAvailable; 1527 return DataNotAvailable;
1526 1528
1527 m_bMainXRefLoadedOK = TRUE; 1529 m_bMainXRefLoadedOK = TRUE;
1528 m_bLinearedDataOK = TRUE; 1530 m_bLinearedDataOK = TRUE;
1529 } 1531 }
1530 1532
1531 return m_bLinearedDataOK ? DataAvailable : DataNotAvailable; 1533 return m_bLinearedDataOK ? DataAvailable : DataNotAvailable;
1532 } 1534 }
1533 1535
1534 FX_BOOL CPDF_DataAvail::CheckPageAnnots(int32_t iPage, DownloadHints* pHints) { 1536 FX_BOOL CPDF_DataAvail::CheckPageAnnots(uint32_t dwPage,
1537 DownloadHints* pHints) {
1535 if (!m_objs_array.GetSize()) { 1538 if (!m_objs_array.GetSize()) {
1536 m_objs_array.RemoveAll(); 1539 m_objs_array.RemoveAll();
1537 m_ObjectSet.clear(); 1540 m_ObjectSet.clear();
1538 1541
1539 CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iPage); 1542 FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage);
1543 CPDF_Dictionary* pPageDict = m_pDocument->GetPage(safePage.ValueOrDie());
1540 if (!pPageDict) 1544 if (!pPageDict)
1541 return TRUE; 1545 return TRUE;
1542 1546
1543 CPDF_Object* pAnnots = pPageDict->GetObjectBy("Annots"); 1547 CPDF_Object* pAnnots = pPageDict->GetObjectBy("Annots");
1544 if (!pAnnots) 1548 if (!pAnnots)
1545 return TRUE; 1549 return TRUE;
1546 1550
1547 CFX_ArrayTemplate<CPDF_Object*> obj_array; 1551 CFX_ArrayTemplate<CPDF_Object*> obj_array;
1548 obj_array.Add(pAnnots); 1552 obj_array.Add(pAnnots);
1549 1553
1550 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array); 1554 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array);
1551 if (bRet) 1555 if (bRet)
1552 m_objs_array.RemoveAll(); 1556 m_objs_array.RemoveAll();
1553 1557
1554 return bRet; 1558 return bRet;
1555 } 1559 }
1556 1560
1557 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; 1561 CFX_ArrayTemplate<CPDF_Object*> new_objs_array;
1558 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); 1562 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
1559 m_objs_array.RemoveAll(); 1563 m_objs_array.RemoveAll();
1560 if (!bRet) 1564 if (!bRet)
1561 m_objs_array.Append(new_objs_array); 1565 m_objs_array.Append(new_objs_array);
1562 1566
1563 return bRet; 1567 return bRet;
1564 } 1568 }
1565 1569
1566 CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckLinearizedFirstPage( 1570 CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckLinearizedFirstPage(
1567 int32_t iPage, 1571 uint32_t dwPage,
1568 DownloadHints* pHints) { 1572 DownloadHints* pHints) {
1569 if (!m_bAnnotsLoad) { 1573 if (!m_bAnnotsLoad) {
1570 if (!CheckPageAnnots(iPage, pHints)) 1574 if (!CheckPageAnnots(dwPage, pHints))
1571 return DataNotAvailable; 1575 return DataNotAvailable;
1572 m_bAnnotsLoad = TRUE; 1576 m_bAnnotsLoad = TRUE;
1573 } 1577 }
1574 1578
1575 DocAvailStatus nRet = CheckLinearizedData(pHints); 1579 DocAvailStatus nRet = CheckLinearizedData(pHints);
1576 if (nRet == DataAvailable) 1580 if (nRet == DataAvailable)
1577 m_bPageLoadedOK = FALSE; 1581 m_bPageLoadedOK = FALSE;
1578 return nRet; 1582 return nRet;
1579 } 1583 }
1580 1584
(...skipping 13 matching lines...) Expand all
1594 CPDF_Object* pRet = pParentDict->GetObjectBy("Resources"); 1598 CPDF_Object* pRet = pParentDict->GetObjectBy("Resources");
1595 if (pRet) { 1599 if (pRet) {
1596 m_pPageResource = pRet; 1600 m_pPageResource = pRet;
1597 return TRUE; 1601 return TRUE;
1598 } 1602 }
1599 1603
1600 return HaveResourceAncestor(pParentDict); 1604 return HaveResourceAncestor(pParentDict);
1601 } 1605 }
1602 1606
1603 CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail( 1607 CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
1604 int32_t iPage, 1608 uint32_t dwPage,
1605 DownloadHints* pHints) { 1609 DownloadHints* pHints) {
1606 if (!m_pDocument) 1610 if (!m_pDocument)
1607 return DataError; 1611 return DataError;
1608 1612
1609 if (IsFirstCheck(iPage)) { 1613 if (IsFirstCheck(dwPage)) {
1610 m_bCurPageDictLoadOK = FALSE; 1614 m_bCurPageDictLoadOK = FALSE;
1611 m_bPageLoadedOK = FALSE; 1615 m_bPageLoadedOK = FALSE;
1612 m_bAnnotsLoad = FALSE; 1616 m_bAnnotsLoad = FALSE;
1613 m_bNeedDownLoadResource = FALSE; 1617 m_bNeedDownLoadResource = FALSE;
1614 m_objs_array.RemoveAll(); 1618 m_objs_array.RemoveAll();
1615 m_ObjectSet.clear(); 1619 m_ObjectSet.clear();
1616 } 1620 }
1617 1621
1618 if (pdfium::ContainsKey(m_pagesLoadState, iPage)) 1622 if (pdfium::ContainsKey(m_pagesLoadState, dwPage))
1619 return DataAvailable; 1623 return DataAvailable;
1620 1624
1621 if (m_bLinearized) { 1625 if (m_bLinearized) {
1622 if ((uint32_t)iPage == m_dwFirstPageNo) { 1626 if (dwPage == m_dwFirstPageNo) {
1623 DocAvailStatus nRet = CheckLinearizedFirstPage(iPage, pHints); 1627 DocAvailStatus nRet = CheckLinearizedFirstPage(dwPage, pHints);
1624 if (nRet == DataAvailable) 1628 if (nRet == DataAvailable)
1625 m_pagesLoadState.insert(iPage); 1629 m_pagesLoadState.insert(dwPage);
1626 return nRet; 1630 return nRet;
1627 } 1631 }
1628 1632
1629 DocAvailStatus nResult = CheckLinearizedData(pHints); 1633 DocAvailStatus nResult = CheckLinearizedData(pHints);
1630 if (nResult != DataAvailable) 1634 if (nResult != DataAvailable)
1631 return nResult; 1635 return nResult;
1632 1636
1633 if (m_pHintTables) { 1637 if (m_pHintTables) {
1634 nResult = m_pHintTables->CheckPage(iPage, pHints); 1638 nResult = m_pHintTables->CheckPage(dwPage, pHints);
1635 if (nResult != DataAvailable) 1639 if (nResult != DataAvailable)
1636 return nResult; 1640 return nResult;
1637 m_pagesLoadState.insert(iPage); 1641 m_pagesLoadState.insert(dwPage);
1638 return DataAvailable; 1642 return DataAvailable;
1639 } 1643 }
1640 1644
1641 if (m_bMainXRefLoadedOK) { 1645 if (m_bMainXRefLoadedOK) {
1642 if (m_bTotalLoadPageTree) { 1646 if (m_bTotalLoadPageTree) {
1643 if (!LoadPages(pHints)) 1647 if (!LoadPages(pHints))
1644 return DataNotAvailable; 1648 return DataNotAvailable;
1645 } else { 1649 } else {
1646 if (!m_bCurPageDictLoadOK && !CheckPage(iPage, pHints)) 1650 if (!m_bCurPageDictLoadOK && !CheckPage(dwPage, pHints))
1647 return DataNotAvailable; 1651 return DataNotAvailable;
1648 } 1652 }
1649 } else { 1653 } else {
1650 if (!LoadAllFile(pHints)) 1654 if (!LoadAllFile(pHints))
1651 return DataNotAvailable; 1655 return DataNotAvailable;
1652 m_pDocument->GetParser()->RebuildCrossRef(); 1656 m_pDocument->GetParser()->RebuildCrossRef();
1653 ResetFirstCheck(iPage); 1657 ResetFirstCheck(dwPage);
1654 return DataAvailable; 1658 return DataAvailable;
1655 } 1659 }
1656 } else { 1660 } else {
1657 if (!m_bTotalLoadPageTree && !m_bCurPageDictLoadOK && 1661 if (!m_bTotalLoadPageTree && !m_bCurPageDictLoadOK &&
1658 !CheckPage(iPage, pHints)) { 1662 !CheckPage(dwPage, pHints)) {
1659 return DataNotAvailable; 1663 return DataNotAvailable;
1660 } 1664 }
1661 } 1665 }
1662 1666
1663 if (m_bHaveAcroForm && !m_bAcroFormLoad) { 1667 if (m_bHaveAcroForm && !m_bAcroFormLoad) {
1664 if (!CheckAcroFormSubObject(pHints)) 1668 if (!CheckAcroFormSubObject(pHints))
1665 return DataNotAvailable; 1669 return DataNotAvailable;
1666 m_bAcroFormLoad = TRUE; 1670 m_bAcroFormLoad = TRUE;
1667 } 1671 }
1668 1672
1669 if (!m_bPageLoadedOK) { 1673 if (!m_bPageLoadedOK) {
1670 if (!m_objs_array.GetSize()) { 1674 if (!m_objs_array.GetSize()) {
1671 m_objs_array.RemoveAll(); 1675 m_objs_array.RemoveAll();
1672 m_ObjectSet.clear(); 1676 m_ObjectSet.clear();
1673 1677
1674 m_pPageDict = m_pDocument->GetPage(iPage); 1678 FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage);
1679 m_pPageDict = m_pDocument->GetPage(safePage.ValueOrDie());
1675 if (!m_pPageDict) { 1680 if (!m_pPageDict) {
1676 ResetFirstCheck(iPage); 1681 ResetFirstCheck(dwPage);
1677 return DataAvailable; 1682 return DataAvailable;
1678 } 1683 }
1679 1684
1680 CFX_ArrayTemplate<CPDF_Object*> obj_array; 1685 CFX_ArrayTemplate<CPDF_Object*> obj_array;
1681 obj_array.Add(m_pPageDict); 1686 obj_array.Add(m_pPageDict);
1682 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array); 1687 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array);
1683 if (!bRet) 1688 if (!bRet)
1684 return DataNotAvailable; 1689 return DataNotAvailable;
1685 1690
1686 m_objs_array.RemoveAll(); 1691 m_objs_array.RemoveAll();
1687 } else { 1692 } else {
1688 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; 1693 CFX_ArrayTemplate<CPDF_Object*> new_objs_array;
1689 FX_BOOL bRet = 1694 FX_BOOL bRet =
1690 IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); 1695 IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
1691 1696
1692 m_objs_array.RemoveAll(); 1697 m_objs_array.RemoveAll();
1693 if (!bRet) { 1698 if (!bRet) {
1694 m_objs_array.Append(new_objs_array); 1699 m_objs_array.Append(new_objs_array);
1695 return DataNotAvailable; 1700 return DataNotAvailable;
1696 } 1701 }
1697 } 1702 }
1698 m_bPageLoadedOK = TRUE; 1703 m_bPageLoadedOK = TRUE;
1699 } 1704 }
1700 1705
1701 if (!m_bAnnotsLoad) { 1706 if (!m_bAnnotsLoad) {
1702 if (!CheckPageAnnots(iPage, pHints)) 1707 if (!CheckPageAnnots(dwPage, pHints))
1703 return DataNotAvailable; 1708 return DataNotAvailable;
1704 m_bAnnotsLoad = TRUE; 1709 m_bAnnotsLoad = TRUE;
1705 } 1710 }
1706 1711
1707 if (m_pPageDict && !m_bNeedDownLoadResource) { 1712 if (m_pPageDict && !m_bNeedDownLoadResource) {
1708 m_pPageResource = m_pPageDict->GetObjectBy("Resources"); 1713 m_pPageResource = m_pPageDict->GetObjectBy("Resources");
1709 if (!m_pPageResource) 1714 m_bNeedDownLoadResource =
1710 m_bNeedDownLoadResource = HaveResourceAncestor(m_pPageDict); 1715 m_pPageResource || HaveResourceAncestor(m_pPageDict);
1711 else
1712 m_bNeedDownLoadResource = TRUE;
1713 } 1716 }
1714 1717
1715 if (m_bNeedDownLoadResource) { 1718 if (m_bNeedDownLoadResource) {
1716 FX_BOOL bRet = CheckResources(pHints); 1719 if (!CheckResources(pHints))
1717 if (!bRet)
1718 return DataNotAvailable; 1720 return DataNotAvailable;
1719 m_bNeedDownLoadResource = FALSE; 1721 m_bNeedDownLoadResource = FALSE;
1720 } 1722 }
1721 1723
1722 m_bPageLoadedOK = FALSE; 1724 m_bPageLoadedOK = FALSE;
1723 m_bAnnotsLoad = FALSE; 1725 m_bAnnotsLoad = FALSE;
1724 m_bCurPageDictLoadOK = FALSE; 1726 m_bCurPageDictLoadOK = FALSE;
1725 1727
1726 ResetFirstCheck(iPage); 1728 ResetFirstCheck(dwPage);
1727 m_pagesLoadState.insert(iPage); 1729 m_pagesLoadState.insert(dwPage);
1728 return DataAvailable; 1730 return DataAvailable;
1729 } 1731 }
1730 1732
1731 FX_BOOL CPDF_DataAvail::CheckResources(DownloadHints* pHints) { 1733 FX_BOOL CPDF_DataAvail::CheckResources(DownloadHints* pHints) {
1732 if (!m_objs_array.GetSize()) { 1734 if (!m_objs_array.GetSize()) {
1733 m_objs_array.RemoveAll(); 1735 m_objs_array.RemoveAll();
1734 CFX_ArrayTemplate<CPDF_Object*> obj_array; 1736 CFX_ArrayTemplate<CPDF_Object*> obj_array;
1735 obj_array.Add(m_pPageResource); 1737 obj_array.Add(m_pPageResource);
1736 1738
1737 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array); 1739 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1833 return FormAvailable; 1835 return FormAvailable;
1834 } 1836 }
1835 1837
1836 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} 1838 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {}
1837 1839
1838 CPDF_DataAvail::PageNode::~PageNode() { 1840 CPDF_DataAvail::PageNode::~PageNode() {
1839 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) 1841 for (int32_t i = 0; i < m_childNode.GetSize(); ++i)
1840 delete m_childNode[i]; 1842 delete m_childNode[i];
1841 m_childNode.RemoveAll(); 1843 m_childNode.RemoveAll();
1842 } 1844 }
OLDNEW
« no previous file with comments | « no previous file | core/fpdfapi/fpdf_parser/cpdf_hint_tables.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698