diff options
author | Jun Fang <jun_fang@foxitsoftware.com> | 2015-12-18 16:05:57 +0800 |
---|---|---|
committer | Jun Fang <jun_fang@foxitsoftware.com> | 2015-12-18 16:05:57 +0800 |
commit | 178086485892c9bb6aa0bf57ee449b33705e71c0 (patch) | |
tree | 1baf910beef3949346d6caaec69b9763ee1dad5d /core/src | |
parent | cc70b7b55c9edcd0ff038f59080699060fbbede1 (diff) | |
download | pdfium-178086485892c9bb6aa0bf57ee449b33705e71c0.tar.xz |
Correct return values in CPDF_HintTables::CheckPage()chromium/2596
BUG=pdfium:329
R=thestig@chromium.org
Review URL: https://codereview.chromium.org/1529173005 .
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp index bdbb939148..e098112ba1 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; } |