Index: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
index bdbb939148ced7c1f902924745106a58bc7169b4..e098112ba1bb9aefa832dc95d40a08b0594a3703 100644 |
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
@@ -4907,11 +4907,11 @@ int32_t CPDF_HintTables::CheckPage(int index, IFX_DownloadHints* pHints) { |
if (index == nFirstAvailPage) |
return IPDF_DataAvail::DataAvailable; |
FX_DWORD dwLength = GetItemLength(index, m_szPageOffsetArray); |
- if (!dwLength || |
- !m_pDataAvail->IsDataAvail(m_szPageOffsetArray[index], dwLength, |
- pHints)) { |
+ // If two pages have the same offset, it should be treated as an error. |
+ if (!dwLength) |
+ return IPDF_DataAvail::DataError; |
+ if (!m_pDataAvail->IsDataAvail(m_szPageOffsetArray[index], dwLength, pHints)) |
return IPDF_DataAvail::DataNotAvailable; |
- } |
// Download data of shared objects in the page. |
FX_DWORD offset = 0; |
for (int i = 0; i < index; ++i) { |
@@ -4920,7 +4920,7 @@ int32_t CPDF_HintTables::CheckPage(int index, IFX_DownloadHints* pHints) { |
CPDF_Object* pFirstPageObj = m_pLinearizedDict->GetElementValue("O"); |
int nFirstPageObjNum = pFirstPageObj ? pFirstPageObj->GetInteger() : -1; |
if (nFirstPageObjNum < 0) |
- return FALSE; // TODO(thestig): Fix this and the return type. |
+ return IPDF_DataAvail::DataError; |
FX_DWORD dwIndex = 0; |
FX_DWORD dwObjNum = 0; |
for (int j = 0; j < m_dwNSharedObjsArray[index]; ++j) { |
@@ -4933,8 +4933,10 @@ int32_t CPDF_HintTables::CheckPage(int index, IFX_DownloadHints* pHints) { |
continue; |
} |
dwLength = GetItemLength(dwIndex, m_szSharedObjOffsetArray); |
- if (!dwLength || |
- !m_pDataAvail->IsDataAvail(m_szSharedObjOffsetArray[dwIndex], dwLength, |
+ // If two objects have the same offset, it should be treated as an error. |
+ if (!dwLength) |
+ return IPDF_DataAvail::DataError; |
+ if (!m_pDataAvail->IsDataAvail(m_szSharedObjOffsetArray[dwIndex], dwLength, |
pHints)) { |
return IPDF_DataAvail::DataNotAvailable; |
} |