| Index: core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp
 | 
| diff --git a/core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp b/core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp
 | 
| index 3b0d2afbe0fee24ba29cb0e902ae3cd9c192b859..c234496e407c868e0f4859ac8e0a163a2aa0e1c9 100644
 | 
| --- a/core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp
 | 
| +++ b/core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp
 | 
| @@ -13,6 +13,7 @@
 | 
|  #include "core/fpdfapi/fpdf_parser/include/cpdf_stream.h"
 | 
|  #include "core/fpdfapi/fpdf_parser/include/cpdf_stream_acc.h"
 | 
|  #include "core/fxcrt/include/fx_safe_types.h"
 | 
| +#include "third_party/base/numerics/safe_conversions.h"
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| @@ -42,10 +43,9 @@ CPDF_HintTables::CPDF_HintTables(CPDF_DataAvail* pDataAvail,
 | 
|  CPDF_HintTables::~CPDF_HintTables() {}
 | 
|  
 | 
|  uint32_t CPDF_HintTables::GetItemLength(
 | 
| -    int index,
 | 
| +    uint32_t index,
 | 
|      const std::vector<FX_FILESIZE>& szArray) {
 | 
| -  if (index < 0 || szArray.size() < 2 ||
 | 
| -      static_cast<size_t>(index) > szArray.size() - 2 ||
 | 
| +  if (szArray.size() < 2 || index > szArray.size() - 2 ||
 | 
|        szArray[index] > szArray[index + 1]) {
 | 
|      return 0;
 | 
|    }
 | 
| @@ -355,13 +355,10 @@ bool CPDF_HintTables::ReadSharedObjHintTable(CFX_BitStream* hStream,
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| -bool CPDF_HintTables::GetPagePos(int index,
 | 
| +bool CPDF_HintTables::GetPagePos(uint32_t index,
 | 
|                                   FX_FILESIZE* szPageStartPos,
 | 
|                                   FX_FILESIZE* szPageLength,
 | 
|                                   uint32_t* dwObjNum) {
 | 
| -  if (index < 0)
 | 
| -    return false;
 | 
| -
 | 
|    *szPageStartPos = m_szPageOffsetArray[index];
 | 
|    *szPageLength = GetItemLength(index, m_szPageOffsetArray);
 | 
|  
 | 
| @@ -370,18 +367,19 @@ bool CPDF_HintTables::GetPagePos(int index,
 | 
|      return false;
 | 
|  
 | 
|    int nFirstPageNum = GetFirstPageNumber();
 | 
| -  if (nFirstPageNum < 0)
 | 
| +  if (!pdfium::base::IsValueInRangeForNumericType<uint32_t>(nFirstPageNum))
 | 
|      return false;
 | 
|  
 | 
| -  if (index == nFirstPageNum) {
 | 
| +  uint32_t dwFirstPageNum = static_cast<uint32_t>(nFirstPageNum);
 | 
| +  if (index == dwFirstPageNum) {
 | 
|      *dwObjNum = nFirstPageObjNum;
 | 
|      return true;
 | 
|    }
 | 
|  
 | 
|    // The object number of remaining pages starts from 1.
 | 
|    *dwObjNum = 1;
 | 
| -  for (int i = 0; i < index; ++i) {
 | 
| -    if (i == nFirstPageNum)
 | 
| +  for (uint32_t i = 0; i < index; ++i) {
 | 
| +    if (i == dwFirstPageNum)
 | 
|        continue;
 | 
|      *dwObjNum += m_dwDeltaNObjsArray[i];
 | 
|    }
 | 
| @@ -389,12 +387,16 @@ bool CPDF_HintTables::GetPagePos(int index,
 | 
|  }
 | 
|  
 | 
|  CPDF_DataAvail::DocAvailStatus CPDF_HintTables::CheckPage(
 | 
| -    int index,
 | 
| +    uint32_t index,
 | 
|      CPDF_DataAvail::DownloadHints* pHints) {
 | 
| -  if (!pHints || index < 0)
 | 
| +  if (!pHints)
 | 
| +    return CPDF_DataAvail::DataError;
 | 
| +
 | 
| +  int nFirstPageNum = GetFirstPageNumber();
 | 
| +  if (!pdfium::base::IsValueInRangeForNumericType<uint32_t>(nFirstPageNum))
 | 
|      return CPDF_DataAvail::DataError;
 | 
|  
 | 
| -  if (index == GetFirstPageNumber())
 | 
| +  if (index == static_cast<uint32_t>(nFirstPageNum))
 | 
|      return CPDF_DataAvail::DataAvailable;
 | 
|  
 | 
|    uint32_t dwLength = GetItemLength(index, m_szPageOffsetArray);
 | 
| @@ -407,7 +409,7 @@ CPDF_DataAvail::DocAvailStatus CPDF_HintTables::CheckPage(
 | 
|  
 | 
|    // Download data of shared objects in the page.
 | 
|    uint32_t offset = 0;
 | 
| -  for (int i = 0; i < index; ++i)
 | 
| +  for (uint32_t i = 0; i < index; ++i)
 | 
|      offset += m_dwNSharedObjsArray[i];
 | 
|  
 | 
|    int nFirstPageObjNum = GetFirstPageObjectNumber();
 | 
| 
 |