| Index: core/src/fpdfdoc/doc_action.cpp
 | 
| diff --git a/core/src/fpdfdoc/doc_action.cpp b/core/src/fpdfdoc/doc_action.cpp
 | 
| index bcbfe0f11215f4f65e8e646e12c4ec65ac87a244..d685f64caee28fb6ea311309fdd8331753832a9c 100644
 | 
| --- a/core/src/fpdfdoc/doc_action.cpp
 | 
| +++ b/core/src/fpdfdoc/doc_action.cpp
 | 
| @@ -22,9 +22,8 @@ CPDF_Dest CPDF_Action::GetDest(CPDF_Document* pDoc) const {
 | 
|      CFX_ByteStringC name = pDest->GetString();
 | 
|      return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name));
 | 
|    }
 | 
| -  if (pDest->GetType() == PDFOBJ_ARRAY) {
 | 
| -    return CPDF_Dest((CPDF_Array*)pDest);
 | 
| -  }
 | 
| +  if (CPDF_Array* pArray = pDest->AsArray())
 | 
| +    return CPDF_Dest(pArray);
 | 
|    return CPDF_Dest();
 | 
|  }
 | 
|  const FX_CHAR* g_sATypes[] = {
 | 
| @@ -108,8 +107,8 @@ FX_DWORD CPDF_ActionFields::GetFieldsCount() const {
 | 
|      return 1;
 | 
|    if (pFields->IsString())
 | 
|      return 1;
 | 
| -  if (pFields->GetType() == PDFOBJ_ARRAY)
 | 
| -    return ((CPDF_Array*)pFields)->GetCount();
 | 
| +  if (CPDF_Array* pArray = pFields->AsArray())
 | 
| +    return pArray->GetCount();
 | 
|    return 0;
 | 
|  }
 | 
|  void CPDF_ActionFields::GetAllFields(CFX_PtrArray& fieldObjects) const {
 | 
| @@ -133,8 +132,7 @@ void CPDF_ActionFields::GetAllFields(CFX_PtrArray& fieldObjects) const {
 | 
|  
 | 
|    if (pFields->IsDictionary() || pFields->IsString()) {
 | 
|      fieldObjects.Add(pFields);
 | 
| -  } else if (pFields->GetType() == PDFOBJ_ARRAY) {
 | 
| -    CPDF_Array* pArray = (CPDF_Array*)pFields;
 | 
| +  } else if (CPDF_Array* pArray = pFields->AsArray()) {
 | 
|      FX_DWORD iCount = pArray->GetCount();
 | 
|      for (FX_DWORD i = 0; i < iCount; i++) {
 | 
|        CPDF_Object* pObj = pArray->GetElementValue(i);
 | 
| @@ -166,8 +164,8 @@ CPDF_Object* CPDF_ActionFields::GetField(FX_DWORD iIndex) const {
 | 
|    if (pFields->IsDictionary() || pFields->IsString()) {
 | 
|      if (iIndex == 0)
 | 
|        pFindObj = pFields;
 | 
| -  } else if (pFields->GetType() == PDFOBJ_ARRAY) {
 | 
| -    pFindObj = ((CPDF_Array*)pFields)->GetElementValue(iIndex);
 | 
| +  } else if (CPDF_Array* pArray = pFields->AsArray()) {
 | 
| +    pFindObj = pArray->GetElementValue(iIndex);
 | 
|    }
 | 
|    return pFindObj;
 | 
|  }
 | 
| @@ -222,20 +220,16 @@ int32_t CPDF_Action::GetOperationType() const {
 | 
|    return 0;
 | 
|  }
 | 
|  FX_DWORD CPDF_Action::GetSubActionsCount() const {
 | 
| -  if (m_pDict == NULL || !m_pDict->KeyExist("Next")) {
 | 
| +  if (!m_pDict || !m_pDict->KeyExist("Next"))
 | 
|      return 0;
 | 
| -  }
 | 
| +
 | 
|    CPDF_Object* pNext = m_pDict->GetElementValue("Next");
 | 
| -  if (!pNext) {
 | 
| +  if (!pNext)
 | 
|      return 0;
 | 
| -  }
 | 
| -  int iObjType = pNext->GetType();
 | 
| -  if (iObjType == PDFOBJ_DICTIONARY) {
 | 
| +  if (pNext->IsDictionary())
 | 
|      return 1;
 | 
| -  }
 | 
| -  if (iObjType == PDFOBJ_ARRAY) {
 | 
| -    return ((CPDF_Array*)pNext)->GetCount();
 | 
| -  }
 | 
| +  if (CPDF_Array* pArray = pNext->AsArray())
 | 
| +    return pArray->GetCount();
 | 
|    return 0;
 | 
|  }
 | 
|  CPDF_Action CPDF_Action::GetSubAction(FX_DWORD iIndex) const {
 | 
| @@ -246,8 +240,7 @@ CPDF_Action CPDF_Action::GetSubAction(FX_DWORD iIndex) const {
 | 
|    if (CPDF_Dictionary* pDict = ToDictionary(pNext)) {
 | 
|      if (iIndex == 0)
 | 
|        return CPDF_Action(pDict);
 | 
| -  } else if (pNext->GetType() == PDFOBJ_ARRAY) {
 | 
| -    CPDF_Array* pArray = static_cast<CPDF_Array*>(pNext);
 | 
| +  } else if (CPDF_Array* pArray = ToArray(pNext)) {
 | 
|      return CPDF_Action(pArray->GetDict(iIndex));
 | 
|    }
 | 
|    return CPDF_Action();
 | 
| 
 |