summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2014-09-18 12:11:56 -0700
committerTom Sepez <tsepez@chromium.org>2014-09-18 12:11:56 -0700
commite0399c76ba1412926a3d55f6328a095c23467951 (patch)
treec00a6ce54c2841e565b124ce546e7328f7767564
parent91350103de8aed4a47dabe470673c4681be90aa0 (diff)
downloadpdfium-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.cpp19
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;