Fix reading buffer overflow in parse_string

This commit is contained in:
Max Bruckner 2017-05-10 02:09:01 +02:00
parent b537ca70a3
commit a167d9e381

View File

@ -657,7 +657,7 @@ static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_bu
/* calculate approximate size of the output (overestimate) */ /* calculate approximate size of the output (overestimate) */
size_t allocation_length = 0; size_t allocation_length = 0;
size_t skipped_bytes = 0; size_t skipped_bytes = 0;
while ((*input_end != '\"') && ((size_t)(input_end - input_buffer->content) < input_buffer->length)) while (((size_t)(input_end - input_buffer->content) < input_buffer->length) && (*input_end != '\"'))
{ {
/* is escape sequence */ /* is escape sequence */
if (input_end[0] == '\\') if (input_end[0] == '\\')
@ -672,7 +672,7 @@ static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_bu
} }
input_end++; input_end++;
} }
if (*input_end != '\"') if (((size_t)(input_end - input_buffer->content) >= input_buffer->length) || (*input_end != '\"'))
{ {
goto fail; /* string ended unexpectedly */ goto fail; /* string ended unexpectedly */
} }