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 717a5d1d5338b53bc02af47a32fdf2ca2e404a7c..5de4a41fe15f5144d8cc85755384ce7886267111 100644 |
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
@@ -784,29 +784,20 @@ FX_BOOL CPDF_Parser::RebuildCrossRef() { |
FX_FILESIZE obj_end = 0; |
CPDF_Object* pObject = ParseIndirectObjectAtByStrict( |
m_pDocument, obj_pos, objnum, NULL, &obj_end); |
- if (pObject) { |
- int iType = pObject->GetType(); |
- if (iType == PDFOBJ_STREAM) { |
- CPDF_Stream* pStream = (CPDF_Stream*)pObject; |
- CPDF_Dictionary* pDict = pStream->GetDict(); |
- if (pDict) { |
- if (pDict->KeyExist(FX_BSTRC("Type"))) { |
- CFX_ByteString bsValue = |
- pDict->GetString(FX_BSTRC("Type")); |
- if (bsValue == FX_BSTRC("XRef") && |
- pDict->KeyExist(FX_BSTRC("Size"))) { |
- CPDF_Object* pRoot = |
- pDict->GetElement(FX_BSTRC("Root")); |
- if (pRoot && pRoot->GetDict() && |
- pRoot->GetDict()->GetElement(FX_BSTRC("Pages"))) { |
- if (m_pTrailer) { |
- m_pTrailer->Release(); |
- } |
- m_pTrailer = ToDictionary(pDict->Clone()); |
- } |
+ if (CPDF_Stream* pStream = ToStream(pObject)) { |
+ if (CPDF_Dictionary* pDict = pStream->GetDict()) { |
+ if ((pDict->KeyExist(FX_BSTRC("Type"))) && |
+ (pDict->GetString(FX_BSTRC("Type")) == |
+ FX_BSTRC("XRef") && |
+ pDict->KeyExist(FX_BSTRC("Size")))) { |
+ CPDF_Object* pRoot = pDict->GetElement(FX_BSTRC("Root")); |
+ if (pRoot && pRoot->GetDict() && |
+ pRoot->GetDict()->GetElement(FX_BSTRC("Pages"))) { |
+ if (m_pTrailer) |
+ m_pTrailer->Release(); |
+ m_pTrailer = ToDictionary(pDict->Clone()); |
} |
} |
- } |
} |
} |
FX_FILESIZE offset = 0; |
@@ -855,16 +846,12 @@ FX_BOOL CPDF_Parser::RebuildCrossRef() { |
m_Syntax.RestorePos(pos + i - m_Syntax.m_HeaderOffset); |
CPDF_Object* pObj = m_Syntax.GetObject(m_pDocument, 0, 0, 0); |
if (pObj) { |
- if (!pObj->IsDictionary() && pObj->GetType() != PDFOBJ_STREAM) { |
+ if (!pObj->IsDictionary() && !pObj->AsStream()) { |
pObj->Release(); |
} else { |
- CPDF_Dictionary* pTrailer = NULL; |
- if (pObj->GetType() == PDFOBJ_STREAM) { |
- pTrailer = ((CPDF_Stream*)pObj)->GetDict(); |
- } else { |
- pTrailer = pObj->AsDictionary(); |
- } |
- if (pTrailer) { |
+ CPDF_Stream* pStream = pObj->AsStream(); |
+ if (CPDF_Dictionary* pTrailer = |
+ pStream ? pStream->GetDict() : pObj->AsDictionary()) { |
if (m_pTrailer) { |
CPDF_Object* pRoot = |
pTrailer->GetElement(FX_BSTRC("Root")); |
@@ -886,7 +873,7 @@ FX_BOOL CPDF_Parser::RebuildCrossRef() { |
pObj->Release(); |
} |
} else { |
- if (pObj->GetType() == PDFOBJ_STREAM) { |
+ if (pObj->IsStream()) { |
m_pTrailer = ToDictionary(pTrailer->Clone()); |
pObj->Release(); |
} else { |
@@ -1005,25 +992,25 @@ FX_BOOL CPDF_Parser::RebuildCrossRef() { |
FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos, |
FX_FILESIZE& prev, |
FX_BOOL bMainXRef) { |
- CPDF_Stream* pStream = |
- (CPDF_Stream*)ParseIndirectObjectAt(m_pDocument, pos, 0, NULL); |
- if (!pStream) { |
+ CPDF_Object* pObject = ParseIndirectObjectAt(m_pDocument, pos, 0, nullptr); |
+ if (!pObject) |
return FALSE; |
- } |
+ |
if (m_pDocument) { |
CPDF_Dictionary* pDict = m_pDocument->GetRoot(); |
- if (!pDict || pDict->GetObjNum() != pStream->m_ObjNum) { |
- m_pDocument->InsertIndirectObject(pStream->m_ObjNum, pStream); |
+ if (!pDict || pDict->GetObjNum() != pObject->m_ObjNum) { |
+ m_pDocument->InsertIndirectObject(pObject->m_ObjNum, pObject); |
} else { |
- if (pStream->GetType() == PDFOBJ_STREAM) { |
- pStream->Release(); |
- } |
+ if (pObject->IsStream()) |
+ pObject->Release(); |
return FALSE; |
} |
} |
- if (pStream->GetType() != PDFOBJ_STREAM) { |
+ |
+ CPDF_Stream* pStream = pObject->AsStream(); |
+ if (!pStream) |
return FALSE; |
- } |
+ |
prev = pStream->GetDict()->GetInteger(FX_BSTRC("Prev")); |
int32_t size = pStream->GetDict()->GetInteger(FX_BSTRC("Size")); |
if (size < 0) { |
@@ -1245,15 +1232,15 @@ CPDF_Object* CPDF_Parser::ParseIndirectObject(CPDF_IndirectObjects* pObjList, |
} |
CPDF_StreamAcc* CPDF_Parser::GetObjectStream(FX_DWORD objnum) { |
- CPDF_StreamAcc* pStreamAcc = NULL; |
- if (m_ObjectStreamMap.Lookup((void*)(uintptr_t)objnum, (void*&)pStreamAcc)) { |
+ CPDF_StreamAcc* pStreamAcc = nullptr; |
+ if (m_ObjectStreamMap.Lookup((void*)(uintptr_t)objnum, (void*&)pStreamAcc)) |
return pStreamAcc; |
- } |
+ |
const CPDF_Stream* pStream = |
- m_pDocument ? (CPDF_Stream*)m_pDocument->GetIndirectObject(objnum) : NULL; |
- if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) { |
- return NULL; |
- } |
+ ToStream(m_pDocument ? m_pDocument->GetIndirectObject(objnum) : nullptr); |
+ if (!pStream) |
+ return nullptr; |
+ |
pStreamAcc = new CPDF_StreamAcc; |
pStreamAcc->LoadAllData(pStream); |
m_ObjectStreamMap.SetAt((void*)(uintptr_t)objnum, pStreamAcc); |