diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2015-10-22 09:31:44 -0400 |
---|---|---|
committer | Dan Sinclair <dsinclair@chromium.org> | 2015-10-22 09:31:44 -0400 |
commit | c2bfc000e502c42c9a3017038fd9104c7997d126 (patch) | |
tree | a693dd82199e7af83fac7b7b19d023e4c5fc5e36 /core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | |
parent | 69ceb6a9761b3ccb228a2405e9a493a3666e0601 (diff) | |
download | pdfium-c2bfc000e502c42c9a3017038fd9104c7997d126.tar.xz |
Add type cast definitions for CPDF_Array.
This Cl adds ToArray, CPDF_Object::AsArray and CPDF_Object::IsArray and
updates the src to use them as needed.
BUG=pdfium:201
R=thestig@chromium.org, tsepez@chromium.org
Review URL: https://codereview.chromium.org/1417893003 .
Diffstat (limited to 'core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp')
-rw-r--r-- | core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp index 514380eeab..8b822a8b9c 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp @@ -1154,17 +1154,14 @@ FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos, } CPDF_Array* CPDF_Parser::GetIDArray() { CPDF_Object* pID = m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("ID")) : NULL; - if (pID == NULL) { - return NULL; - } + if (!pID) + return nullptr; + if (pID->GetType() == PDFOBJ_REFERENCE) { pID = ParseIndirectObject(NULL, ((CPDF_Reference*)pID)->GetRefObjNum()); m_pTrailer->SetAt(FX_BSTRC("ID"), pID); } - if (pID == NULL || pID->GetType() != PDFOBJ_ARRAY) { - return NULL; - } - return (CPDF_Array*)pID; + return ToArray(pID); } FX_DWORD CPDF_Parser::GetRootObjNum() { CPDF_Object* pRef = @@ -3474,7 +3471,7 @@ FX_BOOL CPDF_DataAvail::CheckPage(IFX_DownloadHints* pHints) { } continue; } - if (pObj->GetType() == PDFOBJ_ARRAY) { + if (pObj->IsArray()) { CPDF_Array* pArray = pObj->GetArray(); if (pArray) { int32_t iSize = pArray->GetCount(); @@ -3543,7 +3540,7 @@ FX_BOOL CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) { m_PageObjList.Add(pKid->GetRefObjNum()); } break; case PDFOBJ_ARRAY: { - CPDF_Array* pKidsArray = (CPDF_Array*)pKids; + CPDF_Array* pKidsArray = pKids->AsArray(); for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) { CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i); if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) { @@ -4116,13 +4113,15 @@ FX_BOOL CPDF_DataAvail::CheckArrayPageNode(FX_DWORD dwPageNo, } return FALSE; } - if (pPages->GetType() != PDFOBJ_ARRAY) { + + CPDF_Array* pArray = pPages->AsArray(); + if (!pArray) { pPages->Release(); m_docStatus = PDF_DATAAVAIL_ERROR; return FALSE; } + pPageNode->m_type = PDF_PAGENODE_PAGES; - CPDF_Array* pArray = (CPDF_Array*)pPages; for (FX_DWORD i = 0; i < pArray->GetCount(); ++i) { CPDF_Object* pKid = (CPDF_Object*)pArray->GetElement(i); if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) { @@ -4151,7 +4150,7 @@ FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(FX_DWORD dwPageNo, } return FALSE; } - if (pPage->GetType() == PDFOBJ_ARRAY) { + if (pPage->IsArray()) { pPageNode->m_dwPageNo = dwPageNo; pPageNode->m_type = PDF_PAGENODE_ARRAY; pPage->Release(); @@ -4180,7 +4179,7 @@ FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(FX_DWORD dwPageNo, pNode->m_dwPageNo = pKid->GetRefObjNum(); } break; case PDFOBJ_ARRAY: { - CPDF_Array* pKidsArray = (CPDF_Array*)pKids; + CPDF_Array* pKidsArray = pKids->AsArray(); for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) { CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i); if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) { |