refactor cJSONUtils_InplaceDecodePointerString

This commit is contained in:
Max Bruckner 2017-04-30 13:00:16 +02:00
parent 378a333ee2
commit 4ba6bafe34
1 changed files with 21 additions and 8 deletions

View File

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