| Index: core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
 | 
| diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
 | 
| index 127fb932502b72d94e8be2550a14da63e1ba460a..ffa5e62a0784a671662e4b7c4c97936b8b8d372f 100644
 | 
| --- a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
 | 
| +++ b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
 | 
| @@ -418,11 +418,9 @@ void CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary() {
 | 
|      }
 | 
|      bDirect = FALSE;
 | 
|    }
 | 
| -  if (pProperty->GetType() != PDFOBJ_DICTIONARY) {
 | 
| -    return;
 | 
| +  if (CPDF_Dictionary* pDict = pProperty->AsDictionary()) {
 | 
| +    m_CurContentMark.GetModify()->AddMark(tag, pDict, bDirect);
 | 
|    }
 | 
| -  m_CurContentMark.GetModify()->AddMark(tag, (CPDF_Dictionary*)pProperty,
 | 
| -                                        bDirect);
 | 
|  }
 | 
|  void CPDF_StreamContentParser::Handle_BeginMarkedContent() {
 | 
|    if (!m_Options.m_bMarkedContent) {
 | 
| @@ -487,7 +485,7 @@ static CFX_ByteStringC _PDF_FindFullName(const _FX_BSTR* table,
 | 
|  void _PDF_ReplaceAbbr(CPDF_Object* pObj) {
 | 
|    switch (pObj->GetType()) {
 | 
|      case PDFOBJ_DICTIONARY: {
 | 
| -      CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
 | 
| +      CPDF_Dictionary* pDict = pObj->AsDictionary();
 | 
|        FX_POSITION pos = pDict->GetStartPos();
 | 
|        while (pos) {
 | 
|          CFX_ByteString key;
 | 
| @@ -550,7 +548,7 @@ static CFX_ByteStringC _PDF_FindAbbrName(const _FX_BSTR* table,
 | 
|  void _PDF_ReplaceFull(CPDF_Object* pObj) {
 | 
|    switch (pObj->GetType()) {
 | 
|      case PDFOBJ_DICTIONARY: {
 | 
| -      CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
 | 
| +      CPDF_Dictionary* pDict = pObj->AsDictionary();
 | 
|        FX_POSITION pos = pDict->GetStartPos();
 | 
|        while (pos) {
 | 
|          CFX_ByteString key;
 | 
| @@ -886,8 +884,8 @@ void CPDF_StreamContentParser::Handle_SetGray_Stroke() {
 | 
|  void CPDF_StreamContentParser::Handle_SetExtendGraphState() {
 | 
|    CFX_ByteString name = GetString(0);
 | 
|    CPDF_Dictionary* pGS =
 | 
| -      (CPDF_Dictionary*)FindResourceObj(FX_BSTRC("ExtGState"), name);
 | 
| -  if (pGS == NULL || pGS->GetType() != PDFOBJ_DICTIONARY) {
 | 
| +      ToDictionary(FindResourceObj(FX_BSTRC("ExtGState"), name));
 | 
| +  if (!pGS) {
 | 
|      m_bResourceMissing = TRUE;
 | 
|      return;
 | 
|    }
 | 
| @@ -1217,11 +1215,12 @@ CPDF_Object* CPDF_StreamContentParser::FindResourceObj(
 | 
|  }
 | 
|  CPDF_Font* CPDF_StreamContentParser::FindFont(const CFX_ByteString& name) {
 | 
|    CPDF_Dictionary* pFontDict =
 | 
| -      (CPDF_Dictionary*)FindResourceObj(FX_BSTRC("Font"), name);
 | 
| -  if (pFontDict == NULL || pFontDict->GetType() != PDFOBJ_DICTIONARY) {
 | 
| +      ToDictionary(FindResourceObj(FX_BSTRC("Font"), name));
 | 
| +  if (!pFontDict) {
 | 
|      m_bResourceMissing = TRUE;
 | 
|      return CPDF_Font::GetStockFont(m_pDocument, FX_BSTRC("Helvetica"));
 | 
|    }
 | 
| +
 | 
|    CPDF_Font* pFont = m_pDocument->LoadFont(pFontDict);
 | 
|    if (pFont && pFont->GetType3Font()) {
 | 
|      pFont->GetType3Font()->SetPageResources(m_pResources);
 | 
| @@ -1261,8 +1260,8 @@ CPDF_Pattern* CPDF_StreamContentParser::FindPattern(const CFX_ByteString& name,
 | 
|                                                      FX_BOOL bShading) {
 | 
|    CPDF_Object* pPattern = FindResourceObj(
 | 
|        bShading ? FX_BSTRC("Shading") : FX_BSTRC("Pattern"), name);
 | 
| -  if (pPattern == NULL || (pPattern->GetType() != PDFOBJ_DICTIONARY &&
 | 
| -                           pPattern->GetType() != PDFOBJ_STREAM)) {
 | 
| +  if (pPattern == NULL ||
 | 
| +      (!pPattern->IsDictionary() && pPattern->GetType() != PDFOBJ_STREAM)) {
 | 
|      m_bResourceMissing = TRUE;
 | 
|      return NULL;
 | 
|    }
 | 
| 
 |