cJSON_Utils: Fix size_t support of cJSONUtils_GetPointer

This commit is contained in:
Max Bruckner 2017-04-12 11:21:48 +02:00
parent 3056d85f01
commit c960b2b853

View File

@ -194,6 +194,19 @@ CJSON_PUBLIC(char *) cJSONUtils_FindPointerFromObjectTo(cJSON *object, cJSON *ta
return NULL;
}
/* non broken version of cJSON_GetArrayItem */
static cJSON *get_array_item(const cJSON *array, size_t item)
{
cJSON *child = array ? array->child : NULL;
while ((child != NULL) && (item > 0))
{
item--;
child = child->next;
}
return child;
}
CJSON_PUBLIC(cJSON *) cJSONUtils_GetPointer(cJSON *object, const char *pointer)
{
/* follow path of the pointer */
@ -201,22 +214,18 @@ CJSON_PUBLIC(cJSON *) cJSONUtils_GetPointer(cJSON *object, const char *pointer)
{
if (cJSON_IsArray(object))
{
size_t which = 0;
size_t index = 0;
/* parse array index */
while ((*pointer >= '0') && (*pointer <= '9'))
{
which = (10 * which) + (size_t)(*pointer++ - '0');
index = (10 * index) + (size_t)(*pointer++ - '0');
}
if (*pointer && (*pointer != '/'))
{
/* not end of string or new path token */
return NULL;
}
if (which > INT_MAX)
{
return NULL;
}
object = cJSON_GetArrayItem(object, (int)which);
object = get_array_item(object, index);
}
else if (cJSON_IsObject(object))
{