|
|
@ -288,22 +288,35 @@ CJSON_PUBLIC(cJSON *) cJSONUtils_GetPointer(cJSON * const object, const char *po |
|
|
|
/* JSON Patch implementation. */ |
|
|
|
static void cJSONUtils_InplaceDecodePointerString(unsigned char *string) |
|
|
|
{ |
|
|
|
unsigned char *s2 = string; |
|
|
|
unsigned char *decoded_string = string; |
|
|
|
|
|
|
|
if (string == NULL) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
for (; *string; (void)s2++, string++) |
|
|
|
for (; *string; (void)decoded_string++, string++) |
|
|
|
{ |
|
|
|
*s2 = (unsigned char) ((*string != '~') |
|
|
|
? (*string) |
|
|
|
: ((*(++string) == '0') |
|
|
|
? '~' |
|
|
|
: '/')); |
|
|
|
if (string[0] == '~') |
|
|
|
{ |
|
|
|
if (string[1] == '0') |
|
|
|
{ |
|
|
|
decoded_string[0] = '~'; |
|
|
|
} |
|
|
|
else if (string[1] == '1') |
|
|
|
{ |
|
|
|
decoded_string[1] = '/'; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
/* invalid escape sequence */ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
string++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
*s2 = '\0'; |
|
|
|
decoded_string[0] = '\0'; |
|
|
|
} |
|
|
|
|
|
|
|
/* non-broken cJSON_DetachItemFromArray */ |
|
|
|