diff options
author | Eric Haszlakiewicz <erh+git@nimenees.com> | 2020-06-21 02:35:42 +0000 |
---|---|---|
committer | Eric Haszlakiewicz <erh+git@nimenees.com> | 2020-06-21 02:35:42 +0000 |
commit | 50179fb09f5d317e7192c781ca4a6b039d7818ae (patch) | |
tree | 00b82e0c5152372bba8d2723cc80b52a7091dd6c /json_tokener.h | |
parent | da76ee26e7977cc4d796ed8c7e263d95cd94a199 (diff) | |
download | json-c-50179fb09f5d317e7192c781ca4a6b039d7818ae.tar.gz |
Update the json_tokener_parse_ex() docs to clarify that the final '\0' character is to be included in length passed in.
Diffstat (limited to 'json_tokener.h')
-rw-r--r-- | json_tokener.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/json_tokener.h b/json_tokener.h index 8afa6ec..4e17dff 100644 --- a/json_tokener.h +++ b/json_tokener.h @@ -220,8 +220,8 @@ JSON_EXPORT void json_tokener_set_flags(struct json_tokener *tok, int flags); * * If json_tokener_parse_ex() returns NULL and the error is anything other than * json_tokener_continue, a fatal error has occurred and parsing must be - * halted. Then, the tok object must not be reused until json_tokener_reset() is - * called. + * halted. Then, the tok object must not be reused until json_tokener_reset() + * is called. * * When a valid JSON value is parsed, a non-NULL json_object will be * returned, with a reference count of one which belongs to the caller. Also, @@ -234,13 +234,18 @@ JSON_EXPORT void json_tokener_set_flags(struct json_tokener *tok, int flags); * error or to handle the additional characters, perhaps by parsing another * json value starting from that point. * + * If the caller knows that they are at the end of their input, the length + * passed MUST include the final '\0' character, so values with no inherent + * end (i.e. numbers) can be properly parsed, rather than just returning + * json_tokener_continue. + * * Extra characters can be detected by comparing the value returned by * json_tokener_get_parse_end() against * the length of the last len parameter passed in. * * The tokener does \b not maintain an internal buffer so the caller is - * responsible for calling json_tokener_parse_ex with an appropriate str - * parameter starting with the extra characters. + * responsible for a subsequent call to json_tokener_parse_ex with an + * appropriate str parameter starting with the extra characters. * * This interface is presently not 64-bit clean due to the int len argument * so the function limits the maximum string size to INT32_MAX (2GB). @@ -256,6 +261,8 @@ enum json_tokener_error jerr; do { mystring = ... // get JSON string, e.g. read from file, etc... stringlen = strlen(mystring); + if (end_of_input) + stringlen++; // Include the '\0' if we know we're at the end of input jobj = json_tokener_parse_ex(tok, mystring, stringlen); } while ((jerr = json_tokener_get_error(tok)) == json_tokener_continue); if (jerr != json_tokener_success) |