cJSON_ParseWithOptions: Remove end pointer

This commit is contained in:
Max Bruckner 2017-03-21 18:35:22 +01:00
parent 87a204ed0b
commit 80bc7652ae

21
cJSON.c
View File

@ -924,16 +924,6 @@ static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_bu
static cJSON_bool print_object(const cJSON * const item, const size_t depth, const cJSON_bool format, printbuffer * const output_buffer, const internal_hooks * const hooks); static cJSON_bool print_object(const cJSON * const item, const size_t depth, const cJSON_bool format, printbuffer * const output_buffer, const internal_hooks * const hooks);
/* Utility to jump whitespace and cr/lf */ /* Utility to jump whitespace and cr/lf */
static const unsigned char *skip_whitespace(const unsigned char *in)
{
while (in && *in && (*in <= 32))
{
in++;
}
return in;
}
static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer) static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
{ {
if ((buffer == NULL) || (buffer->content == NULL)) if ((buffer == NULL) || (buffer->content == NULL))
@ -958,7 +948,6 @@ static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated) CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated)
{ {
parse_buffer buffer; parse_buffer buffer;
const unsigned char *end = NULL;
/* use global error pointer if no specific one was given */ /* use global error pointer if no specific one was given */
const unsigned char **error_pointer = (return_parse_end != NULL) ? (const unsigned char**)return_parse_end : &global_ep; const unsigned char **error_pointer = (return_parse_end != NULL) ? (const unsigned char**)return_parse_end : &global_ep;
cJSON *item = NULL; cJSON *item = NULL;
@ -986,21 +975,19 @@ CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return
goto fail; goto fail;
} }
end = buffer_at_offset(&buffer);
/* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */ /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */
if (require_null_terminated) if (require_null_terminated)
{ {
end = skip_whitespace(end); buffer_skip_whitespace(&buffer);
if (*end != '\0') if ((buffer.offset >= buffer.length) || buffer_at_offset(&buffer)[0] != '\0')
{ {
*error_pointer = end; *error_pointer = buffer_at_offset(&buffer);
goto fail; goto fail;
} }
} }
if (return_parse_end) if (return_parse_end)
{ {
*return_parse_end = (const char*)end; *return_parse_end = (const char*)buffer_at_offset(&buffer);
} }
return item; return item;