| Index: core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp
|
| diff --git a/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp b/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp
|
| index 58b69257addc8628cef46f8aa600f2cadf3b779b..b7395ee7a5bc0eab19971b0c43b08640f52d4d66 100644
|
| --- a/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp
|
| +++ b/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp
|
| @@ -479,12 +479,12 @@ FX_BOOL CPDF_DataAvail::PreparePageItem() {
|
| return TRUE;
|
| }
|
|
|
| -bool CPDF_DataAvail::IsFirstCheck(int iPage) {
|
| - return m_pageMapCheckState.insert(iPage).second;
|
| +bool CPDF_DataAvail::IsFirstCheck(uint32_t dwPage) {
|
| + return m_pageMapCheckState.insert(dwPage).second;
|
| }
|
|
|
| -void CPDF_DataAvail::ResetFirstCheck(int iPage) {
|
| - m_pageMapCheckState.erase(iPage);
|
| +void CPDF_DataAvail::ResetFirstCheck(uint32_t dwPage) {
|
| + m_pageMapCheckState.erase(dwPage);
|
| }
|
|
|
| FX_BOOL CPDF_DataAvail::CheckPage(DownloadHints* pHints) {
|
| @@ -1235,7 +1235,7 @@ FX_BOOL CPDF_DataAvail::CheckTrailer(DownloadHints* pHints) {
|
| return FALSE;
|
| }
|
|
|
| -FX_BOOL CPDF_DataAvail::CheckPage(int32_t iPage, DownloadHints* pHints) {
|
| +FX_BOOL CPDF_DataAvail::CheckPage(uint32_t dwPage, DownloadHints* pHints) {
|
| while (TRUE) {
|
| switch (m_docStatus) {
|
| case PDF_DATAAVAIL_PAGETREE:
|
| @@ -1243,7 +1243,7 @@ FX_BOOL CPDF_DataAvail::CheckPage(int32_t iPage, DownloadHints* pHints) {
|
| return FALSE;
|
| break;
|
| case PDF_DATAAVAIL_PAGE:
|
| - if (!LoadDocPage(iPage, pHints))
|
| + if (!LoadDocPage(dwPage, pHints))
|
| return FALSE;
|
| break;
|
| case PDF_DATAAVAIL_ERROR:
|
| @@ -1420,7 +1420,9 @@ FX_BOOL CPDF_DataAvail::CheckPageNode(CPDF_DataAvail::PageNode& pageNodes,
|
| return TRUE;
|
| }
|
|
|
| -FX_BOOL CPDF_DataAvail::LoadDocPage(int32_t iPage, DownloadHints* pHints) {
|
| +FX_BOOL CPDF_DataAvail::LoadDocPage(uint32_t dwPage, DownloadHints* pHints) {
|
| + FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage);
|
| + int32_t iPage = safePage.ValueOrDie();
|
| if (m_pDocument->GetPageCount() <= iPage ||
|
| m_pDocument->m_PageList.GetAt(iPage)) {
|
| m_docStatus = PDF_DATAAVAIL_DONE;
|
| @@ -1531,12 +1533,14 @@ CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckLinearizedData(
|
| return m_bLinearedDataOK ? DataAvailable : DataNotAvailable;
|
| }
|
|
|
| -FX_BOOL CPDF_DataAvail::CheckPageAnnots(int32_t iPage, DownloadHints* pHints) {
|
| +FX_BOOL CPDF_DataAvail::CheckPageAnnots(uint32_t dwPage,
|
| + DownloadHints* pHints) {
|
| if (!m_objs_array.GetSize()) {
|
| m_objs_array.RemoveAll();
|
| m_ObjectSet.clear();
|
|
|
| - CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iPage);
|
| + FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage);
|
| + CPDF_Dictionary* pPageDict = m_pDocument->GetPage(safePage.ValueOrDie());
|
| if (!pPageDict)
|
| return TRUE;
|
|
|
| @@ -1564,10 +1568,10 @@ FX_BOOL CPDF_DataAvail::CheckPageAnnots(int32_t iPage, DownloadHints* pHints) {
|
| }
|
|
|
| CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckLinearizedFirstPage(
|
| - int32_t iPage,
|
| + uint32_t dwPage,
|
| DownloadHints* pHints) {
|
| if (!m_bAnnotsLoad) {
|
| - if (!CheckPageAnnots(iPage, pHints))
|
| + if (!CheckPageAnnots(dwPage, pHints))
|
| return DataNotAvailable;
|
| m_bAnnotsLoad = TRUE;
|
| }
|
| @@ -1601,12 +1605,12 @@ FX_BOOL CPDF_DataAvail::HaveResourceAncestor(CPDF_Dictionary* pDict) {
|
| }
|
|
|
| CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
|
| - int32_t iPage,
|
| + uint32_t dwPage,
|
| DownloadHints* pHints) {
|
| if (!m_pDocument)
|
| return DataError;
|
|
|
| - if (IsFirstCheck(iPage)) {
|
| + if (IsFirstCheck(dwPage)) {
|
| m_bCurPageDictLoadOK = FALSE;
|
| m_bPageLoadedOK = FALSE;
|
| m_bAnnotsLoad = FALSE;
|
| @@ -1615,14 +1619,14 @@ CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
|
| m_ObjectSet.clear();
|
| }
|
|
|
| - if (pdfium::ContainsKey(m_pagesLoadState, iPage))
|
| + if (pdfium::ContainsKey(m_pagesLoadState, dwPage))
|
| return DataAvailable;
|
|
|
| if (m_bLinearized) {
|
| - if ((uint32_t)iPage == m_dwFirstPageNo) {
|
| - DocAvailStatus nRet = CheckLinearizedFirstPage(iPage, pHints);
|
| + if (dwPage == m_dwFirstPageNo) {
|
| + DocAvailStatus nRet = CheckLinearizedFirstPage(dwPage, pHints);
|
| if (nRet == DataAvailable)
|
| - m_pagesLoadState.insert(iPage);
|
| + m_pagesLoadState.insert(dwPage);
|
| return nRet;
|
| }
|
|
|
| @@ -1631,10 +1635,10 @@ CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
|
| return nResult;
|
|
|
| if (m_pHintTables) {
|
| - nResult = m_pHintTables->CheckPage(iPage, pHints);
|
| + nResult = m_pHintTables->CheckPage(dwPage, pHints);
|
| if (nResult != DataAvailable)
|
| return nResult;
|
| - m_pagesLoadState.insert(iPage);
|
| + m_pagesLoadState.insert(dwPage);
|
| return DataAvailable;
|
| }
|
|
|
| @@ -1643,19 +1647,19 @@ CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
|
| if (!LoadPages(pHints))
|
| return DataNotAvailable;
|
| } else {
|
| - if (!m_bCurPageDictLoadOK && !CheckPage(iPage, pHints))
|
| + if (!m_bCurPageDictLoadOK && !CheckPage(dwPage, pHints))
|
| return DataNotAvailable;
|
| }
|
| } else {
|
| if (!LoadAllFile(pHints))
|
| return DataNotAvailable;
|
| m_pDocument->GetParser()->RebuildCrossRef();
|
| - ResetFirstCheck(iPage);
|
| + ResetFirstCheck(dwPage);
|
| return DataAvailable;
|
| }
|
| } else {
|
| if (!m_bTotalLoadPageTree && !m_bCurPageDictLoadOK &&
|
| - !CheckPage(iPage, pHints)) {
|
| + !CheckPage(dwPage, pHints)) {
|
| return DataNotAvailable;
|
| }
|
| }
|
| @@ -1671,9 +1675,10 @@ CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
|
| m_objs_array.RemoveAll();
|
| m_ObjectSet.clear();
|
|
|
| - m_pPageDict = m_pDocument->GetPage(iPage);
|
| + FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage);
|
| + m_pPageDict = m_pDocument->GetPage(safePage.ValueOrDie());
|
| if (!m_pPageDict) {
|
| - ResetFirstCheck(iPage);
|
| + ResetFirstCheck(dwPage);
|
| return DataAvailable;
|
| }
|
|
|
| @@ -1699,22 +1704,19 @@ CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
|
| }
|
|
|
| if (!m_bAnnotsLoad) {
|
| - if (!CheckPageAnnots(iPage, pHints))
|
| + if (!CheckPageAnnots(dwPage, pHints))
|
| return DataNotAvailable;
|
| m_bAnnotsLoad = TRUE;
|
| }
|
|
|
| if (m_pPageDict && !m_bNeedDownLoadResource) {
|
| m_pPageResource = m_pPageDict->GetObjectBy("Resources");
|
| - if (!m_pPageResource)
|
| - m_bNeedDownLoadResource = HaveResourceAncestor(m_pPageDict);
|
| - else
|
| - m_bNeedDownLoadResource = TRUE;
|
| + m_bNeedDownLoadResource =
|
| + m_pPageResource || HaveResourceAncestor(m_pPageDict);
|
| }
|
|
|
| if (m_bNeedDownLoadResource) {
|
| - FX_BOOL bRet = CheckResources(pHints);
|
| - if (!bRet)
|
| + if (!CheckResources(pHints))
|
| return DataNotAvailable;
|
| m_bNeedDownLoadResource = FALSE;
|
| }
|
| @@ -1723,8 +1725,8 @@ CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsPageAvail(
|
| m_bAnnotsLoad = FALSE;
|
| m_bCurPageDictLoadOK = FALSE;
|
|
|
| - ResetFirstCheck(iPage);
|
| - m_pagesLoadState.insert(iPage);
|
| + ResetFirstCheck(dwPage);
|
| + m_pagesLoadState.insert(dwPage);
|
| return DataAvailable;
|
| }
|
|
|
|
|