Max Bruckner преди 9 години
родител
ревизия
58bc383b28
променени са 2 файла, в които са добавени 15 реда и са изтрити 4 реда
  1. 5 1
      cJSON_Utils.c
  2. 10 3
      test_utils.c

+ 5 - 1
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;
 }

+ 10 - 3
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();