summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Haszlakiewicz <erh+git@nimenees.com>2012-03-31 22:53:43 -0500
committerEric Haszlakiewicz <erh+git@nimenees.com>2012-03-31 22:53:43 -0500
commitd809fa60c5d0bb91d1c444dfa01b9ab5cb22112e (patch)
treeb2133ddbd3003d71d1ef97b7ac4153c836a4c998
parentc5c623a5461bbba31049b10d369f0125090bebec (diff)
downloadjson-c-d809fa60c5d0bb91d1c444dfa01b9ab5cb22112e.tar.gz
Fix a bug in json_tokener_parse_ex when re-using the same tokener to parse multiple objects. Now, json_tokener_reset() does not need to be called after a valid object is parsed.
-rw-r--r--json_tokener.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/json_tokener.c b/json_tokener.c
index 04950b5..1dc06e4 100644
--- a/json_tokener.c
+++ b/json_tokener.c
@@ -715,7 +715,17 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
tok->err = json_tokener_error_parse_eof;
}
- if(tok->err == json_tokener_success) return json_object_get(current);
+ if (tok->err == json_tokener_success)
+ {
+ json_object *ret = json_object_get(current);
+ int ii;
+
+ /* Partially reset, so we parse additional objects on subsequent calls. */
+ for(ii = tok->depth; ii >= 0; ii--)
+ json_tokener_reset_level(tok, ii);
+ return ret;
+ }
+
MC_DEBUG("json_tokener_parse_ex: error %s at offset %d\n",
json_tokener_errors[tok->err], tok->char_offset);
return NULL;