diff --git a/src/singledocparser.cpp b/src/singledocparser.cpp index 47e9e04..293ba76 100644 --- a/src/singledocparser.cpp +++ b/src/singledocparser.cpp @@ -47,6 +47,8 @@ void SingleDocParser::HandleDocument(EventHandler& eventHandler) { } void SingleDocParser::HandleNode(EventHandler& eventHandler) { + assert(depth < depth_limit); + depth++; // an empty node *is* a possibility if (m_scanner.empty()) { eventHandler.OnNull(m_scanner.mark(), NullAnchor); diff --git a/src/singledocparser.h b/src/singledocparser.h index c8cfca9..47f9b94 100644 --- a/src/singledocparser.h +++ b/src/singledocparser.h @@ -55,6 +55,8 @@ class SingleDocParser { anchor_t LookupAnchor(const Mark& mark, const std::string& name) const; private: + int depth = 0; + int depth_limit = 2000; Scanner& m_scanner; const Directives& m_directives; std::unique_ptr m_pCollectionStack;