From eb177d0053b0b69a3a510d1958b27768de430283 Mon Sep 17 00:00:00 2001 From: Damien Merenne Date: Thu, 29 Dec 2016 12:31:58 +0100 Subject: [PATCH] Use value stack for checking maximum depth. As we now have an explicit stack, we don't need the depth variable argument to count the recursion levels. We can simply use the value stack size instead. --- json11.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/json11.cpp b/json11.cpp index d14fcbb..745dba9 100644 --- a/json11.cpp +++ b/json11.cpp @@ -717,8 +717,8 @@ struct JsonParserPriv final { * * Parse a JSON object. */ - void parse_json(int depth) { - if (depth > max_depth) { + void parse_json() { + if (values.size() > max_depth) { return fail("exceeded maximum nesting depth"); } @@ -773,7 +773,7 @@ struct JsonParserPriv final { if (ch != ':') return fail("expected ':' in object, got " + esc(ch)); - parse_json(depth + 1); + parse_json(); if (need_data) return; @@ -813,7 +813,7 @@ struct JsonParserPriv final { return; i--; - parse_json(depth + 1); + parse_json(); if (need_data) return; @@ -860,7 +860,7 @@ JsonParser::~JsonParser() { void JsonParser::consume(const std::string &in) { parser->str = in; parser->eof = true; - parser->parse_json(0); + parser->parse_json(); } Json JsonParser::json() const { @@ -870,7 +870,7 @@ Json JsonParser::json() const { Json Json::parse(const string &in, string &err, JsonParse strategy) { JsonParserPriv parser { in, err, strategy }; parser.eof = true; - parser.parse_json(0); + parser.parse_json(); // Check for any trailing garbage parser.consume_garbage(); @@ -902,7 +902,7 @@ vector Json::parse_multi(const string &in, parser_stop_pos = 0; vector json_vec; while (parser.i != in.size() && !parser.failed && !parser.need_data) { - parser.parse_json(0); + parser.parse_json(); if (parser.need_data) { parser.failed = true; parser.values.push(Json());