diff --git a/src/singledocparser.cpp b/src/singledocparser.cpp index a27c1c3..1b4262e 100644 --- a/src/singledocparser.cpp +++ b/src/singledocparser.cpp @@ -46,6 +46,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 2b92067..7046f1e 100644 --- a/src/singledocparser.h +++ b/src/singledocparser.h @@ -51,6 +51,8 @@ class SingleDocParser : private noncopyable { 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;