diff options
author | Tom Sepez <tsepez@chromium.org> | 2014-09-18 12:11:56 -0700 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2014-09-18 12:11:56 -0700 |
commit | e0399c76ba1412926a3d55f6328a095c23467951 (patch) | |
tree | c00a6ce54c2841e565b124ce546e7328f7767564 | |
parent | 91350103de8aed4a47dabe470673c4681be90aa0 (diff) | |
download | pdfium-e0399c76ba1412926a3d55f6328a095c23467951.tar.xz |
Fix Regression: Incomplete file loading is seen for multi page pdf files.chromium/2164chromium/2163
This was introduced at PDFium revision 12a9940. There was a subtle logic
change for null |parray|.
BUG=415438
R=jun_fang@foxitsoftware.com
Review URL: https://codereview.chromium.org/579363002
-rw-r--r-- | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp index 97e0d6f5e3..73ae71cda0 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp @@ -1027,26 +1027,21 @@ FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL } else { m_Trailers.Add((CPDF_Dictionary*)pStream->GetDict()->Clone()); } - FX_DWORD nSegs = 0; - std::vector <std::pair <FX_INT32, FX_INT32>> arrIndex; + std::vector<std::pair<FX_INT32, FX_INT32> > arrIndex; CPDF_Array* pArray = pStream->GetDict()->GetArray(FX_BSTRC("Index")); if (pArray) { FX_DWORD nPairSize = pArray->GetCount() / 2; - CPDF_Object* pStartNumObj = NULL; - CPDF_Object* pCountObj = NULL; for (FX_DWORD i = 0; i < nPairSize; i++) { - pStartNumObj = pArray->GetElement(i * 2); - pCountObj = pArray->GetElement(i * 2 + 1); + CPDF_Object* pStartNumObj = pArray->GetElement(i * 2); + CPDF_Object* pCountObj = pArray->GetElement(i * 2 + 1); if (pStartNumObj && pStartNumObj->GetType() == PDFOBJ_NUMBER && pCountObj && pCountObj->GetType() == PDFOBJ_NUMBER) { arrIndex.push_back(std::make_pair(pStartNumObj->GetInteger(), pCountObj->GetInteger())); } } - nSegs = arrIndex.size(); - if (nSegs == 0) { - arrIndex.push_back(std::make_pair(0, size)); - nSegs = 1; - } + } + if (arrIndex.size() == 0) { + arrIndex.push_back(std::make_pair(0, size)); } pArray = pStream->GetDict()->GetArray(FX_BSTRC("W")); if (pArray == NULL) { @@ -1069,7 +1064,7 @@ FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL FX_LPCBYTE pData = acc.GetData(); FX_DWORD dwTotalSize = acc.GetSize(); FX_DWORD segindex = 0; - for (FX_DWORD i = 0; i < nSegs; i ++) { + for (FX_DWORD i = 0; i < arrIndex.size(); i ++) { FX_INT32 startnum = arrIndex[i].first; if (startnum < 0) { continue; |