mirror of
https://github.com/DaveGamble/cJSON.git
synced 2023-08-10 21:13:26 +03:00
cJSON_ParseWithOptions: Remove end pointer
This commit is contained in:
parent
87a204ed0b
commit
80bc7652ae
21
cJSON.c
21
cJSON.c
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user