mirror of
https://github.com/DaveGamble/cJSON.git
synced 2024-12-27 14:14:07 +08:00
cJSON_Utils: Fix size_t support of cJSONUtils_GetPointer
This commit is contained in:
parent
3056d85f01
commit
c960b2b853
@ -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))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user