diff --git a/cJSON_Utils.c b/cJSON_Utils.c index c4a0ae00639952f2409c44c2259a297513b1c277..007f9416655311b54748a67684bbaf7af6c46117 100644 --- a/cJSON_Utils.c +++ b/cJSON_Utils.c @@ -186,7 +186,7 @@ static int cJSONUtils_ApplyPatch(cJSON *object,cJSON *patch) cJSONUtils_InplaceDecodePointerString(childptr); /* add, remove, replace, move, copy, test. */ - if (!parent) {free(parentptr); return 9;} /* Couldn't find object to add to. */ + if (!parent) {free(parentptr); cJSON_Delete(value); return 9;} /* Couldn't find object to add to. */ else if (parent->type==cJSON_Array) { if (!strcmp(childptr,"-")) cJSON_AddItemToArray(parent,value); @@ -197,6 +197,10 @@ static int cJSONUtils_ApplyPatch(cJSON *object,cJSON *patch) cJSON_DeleteItemFromObject(parent,childptr); cJSON_AddItemToObject(parent,childptr,value); } + else + { + cJSON_Delete(value); + } free(parentptr); return 0; } diff --git a/test_utils.c b/test_utils.c index e018081aecfd270c75cb607f82db117c1a35785a..79664a56e9df21e407dc3ab6426dbaf5683536f6 100644 --- a/test_utils.c +++ b/test_utils.c @@ -91,9 +91,16 @@ int main() nums=cJSON_CreateIntArray(numbers,10); num6=cJSON_GetArrayItem(nums,6); cJSON_AddItemToObject(object,"numbers",nums); - printf("Pointer: [%s]\n",cJSONUtils_FindPointerFromObjectTo(object,num6)); - printf("Pointer: [%s]\n",cJSONUtils_FindPointerFromObjectTo(object,nums)); - printf("Pointer: [%s]\n",cJSONUtils_FindPointerFromObjectTo(object,object)); + char *temp=cJSONUtils_FindPointerFromObjectTo(object,num6); + printf("Pointer: [%s]\n",temp); + free(temp); + temp=cJSONUtils_FindPointerFromObjectTo(object,nums); + printf("Pointer: [%s]\n",temp); + free(temp); + temp=cJSONUtils_FindPointerFromObjectTo(object,object); + printf("Pointer: [%s]\n",temp); + free(temp); + cJSON_Delete(object); /* JSON Sort test: */ sortme=cJSON_CreateObject();