Index: core/fpdfapi/fpdf_page/fpdf_page_func.cpp |
diff --git a/core/fpdfapi/fpdf_page/fpdf_page_func.cpp b/core/fpdfapi/fpdf_page/fpdf_page_func.cpp |
index 63ab3056c7bd95a7009d612375e21ec7000019f7..266b2bd09fd4f444894847b8918a43bcb6afcf94 100644 |
--- a/core/fpdfapi/fpdf_page/fpdf_page_func.cpp |
+++ b/core/fpdfapi/fpdf_page/fpdf_page_func.cpp |
@@ -139,9 +139,13 @@ FX_BOOL CPDF_PSEngine::Parse(const FX_CHAR* str, int size) { |
if (word != "{") { |
return FALSE; |
} |
- return m_MainProc.Parse(&parser); |
+ return m_MainProc.Parse(&parser, 0); |
} |
-FX_BOOL CPDF_PSProc::Parse(CPDF_SimpleParser* parser) { |
+ |
+FX_BOOL CPDF_PSProc::Parse(CPDF_SimpleParser* parser, int depth) { |
+ if (depth > kMaxDepth) |
+ return FALSE; |
+ |
while (1) { |
CFX_ByteStringC word = parser->GetWord(); |
if (word.IsEmpty()) { |
@@ -154,7 +158,7 @@ FX_BOOL CPDF_PSProc::Parse(CPDF_SimpleParser* parser) { |
std::unique_ptr<CPDF_PSProc> proc(new CPDF_PSProc); |
std::unique_ptr<CPDF_PSOP> op(new CPDF_PSOP(std::move(proc))); |
m_Operators.push_back(std::move(op)); |
- if (!m_Operators.back()->GetProc()->Parse(parser)) { |
+ if (!m_Operators.back()->GetProc()->Parse(parser, depth + 1)) { |
return FALSE; |
} |
} else { |