CPDFDoc_Environment::GetAnnotHandlerMgr() never returns nullptr.
[pdfium.git] / fpdfsdk / src / fpdfppo.cpp
index 2508adc..6bdd7c5 100644 (file)
@@ -60,7 +60,7 @@ FX_BOOL CPDF_PageOrganizer::PDFDocInit(CPDF_Document* pDestPDFDoc,
 
   CPDF_Object* pElement = pNewRoot->GetElement("Pages");
   CPDF_Dictionary* pNewPages =
-      pElement ? (CPDF_Dictionary*)pElement->GetDirect() : nullptr;
+      pElement ? ToDictionary(pElement->GetDirect()) : nullptr;
   if (!pNewPages) {
     pNewPages = new CPDF_Dictionary;
     FX_DWORD NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages);
@@ -178,19 +178,18 @@ CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag(
     return nullptr;
 
   CPDF_Object* pType = pDict->GetElement("Type")->GetDirect();
-  if (!pType || pType->GetType() != PDFOBJ_NAME)
+  if (!ToName(pType))
     return nullptr;
   if (pType->GetString().Compare("Page"))
     return nullptr;
 
-  CPDF_Object* pParent = pDict->GetElement("Parent")->GetDirect();
-  if (!pParent || pParent->GetType() != PDFOBJ_DICTIONARY)
+  CPDF_Dictionary* pp = ToDictionary(pDict->GetElement("Parent")->GetDirect());
+  if (!pp)
     return nullptr;
 
   if (pDict->KeyExist((const char*)nSrctag))
     return pDict->GetElement((const char*)nSrctag);
 
-  CPDF_Dictionary* pp = (CPDF_Dictionary*)pParent;
   while (pp) {
     if (pp->KeyExist((const char*)nSrctag)) {
       return pp->GetElement((const char*)nSrctag);
@@ -198,12 +197,8 @@ CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag(
     if (!pp->KeyExist("Parent")) {
       break;
     }
-    pp = (CPDF_Dictionary*)pp->GetElement("Parent")->GetDirect();
-    if (pp->GetType() == PDFOBJ_NULL) {
-      break;
-    }
+    pp = ToDictionary(pp->GetElement("Parent")->GetDirect());
   }
-
   return nullptr;
 }
 
@@ -212,7 +207,7 @@ FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj,
                                             ObjectNumberMap* pObjNumberMap) {
   switch (pObj->GetType()) {
     case PDFOBJ_REFERENCE: {
-      CPDF_Reference* pReference = (CPDF_Reference*)pObj;
+      CPDF_Reference* pReference = pObj->AsReference();
       FX_DWORD newobjnum = GetNewObjId(pDoc, pObjNumberMap, pReference);
       if (newobjnum == 0)
         return FALSE;
@@ -220,7 +215,7 @@ FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj,
       break;
     }
     case PDFOBJ_DICTIONARY: {
-      CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
+      CPDF_Dictionary* pDict = pObj->AsDictionary();
 
       FX_POSITION pos = pDict->GetStartPos();
       while (pos) {
@@ -240,7 +235,7 @@ FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj,
       break;
     }
     case PDFOBJ_ARRAY: {
-      CPDF_Array* pArray = (CPDF_Array*)pObj;
+      CPDF_Array* pArray = pObj->AsArray();
       FX_DWORD count = pArray->GetCount();
       for (FX_DWORD i = 0; i < count; ++i) {
         CPDF_Object* pNextObj = pArray->GetElement(i);
@@ -252,7 +247,7 @@ FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj,
       break;
     }
     case PDFOBJ_STREAM: {
-      CPDF_Stream* pStream = (CPDF_Stream*)pObj;
+      CPDF_Stream* pStream = pObj->AsStream();
       CPDF_Dictionary* pDict = pStream->GetDict();
       if (pDict) {
         if (!UpdateReference(pDict, pDoc, pObjNumberMap))
@@ -291,8 +286,7 @@ FX_DWORD CPDF_PageOrganizer::GetNewObjId(CPDF_Document* pDoc,
   if (!pClone)
     return 0;
 
-  if (pClone->GetType() == PDFOBJ_DICTIONARY) {
-    CPDF_Dictionary* pDictClone = (CPDF_Dictionary*)pClone;
+  if (CPDF_Dictionary* pDictClone = pClone->AsDictionary()) {
     if (pDictClone->KeyExist("Type")) {
       CFX_ByteString strType = pDictClone->GetString("Type");
       if (!FXSYS_stricmp(strType, "Pages")) {