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 29265f407faa4e043f4ee05e89840767814c8a36..4b80895d6191a906b49d765647bffdef59bd988b 100644 |
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
@@ -2743,7 +2743,11 @@ public: |
} |
virtual void GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize) FX_OVERRIDE; |
+ |
protected: |
+ static const int kMaxDataAvailRecursionDepth = 64; |
+ static int s_CurrentDataAvailRecursionDepth; |
+ |
FX_DWORD GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset); |
FX_BOOL IsObjectsAvail(CFX_PtrArray& obj_array, FX_BOOL bParsePage, IFX_DownloadHints* pHints, CFX_PtrArray &ret_array); |
FX_BOOL CheckDocStatus(IFX_DownloadHints *pHints); |
@@ -2919,6 +2923,9 @@ IPDF_DataAvail* IPDF_DataAvail::Create(IFX_FileAvail* pFileAvail, IFX_FileRead* |
return FX_NEW CPDF_DataAvail(pFileAvail, pFileRead); |
} |
+// static |
+int CPDF_DataAvail::s_CurrentDataAvailRecursionDepth = 0; |
+ |
CPDF_DataAvail::CPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead) |
: IPDF_DataAvail(pFileAvail, pFileRead) |
{ |
@@ -4395,6 +4402,10 @@ FX_BOOL CPDF_DataAvail::CheckLinearizedFirstPage(FX_INT32 iPage, IFX_DownloadHin |
} |
FX_BOOL CPDF_DataAvail::HaveResourceAncestor(CPDF_Dictionary *pDict) |
{ |
+ CFX_AutoRestorer<int> restorer(&s_CurrentDataAvailRecursionDepth); |
+ if (++s_CurrentDataAvailRecursionDepth > kMaxDataAvailRecursionDepth) { |
+ return FALSE; |
+ } |
CPDF_Object *pParent = pDict->GetElement("Parent"); |
if (!pParent) { |
return FALSE; |
@@ -4407,9 +4418,8 @@ FX_BOOL CPDF_DataAvail::HaveResourceAncestor(CPDF_Dictionary *pDict) |
if (pRet) { |
m_pPageResource = pRet; |
return TRUE; |
- } else { |
- return HaveResourceAncestor(pParentDict); |
} |
+ return HaveResourceAncestor(pParentDict); |
} |
FX_BOOL CPDF_DataAvail::IsPageAvail(FX_INT32 iPage, IFX_DownloadHints* pHints) |
{ |