From 7134612fce9f760ee07001bc65e33dff545edd95 Mon Sep 17 00:00:00 2001 From: Xie Han <63350856@qq.com> Date: Tue, 25 Mar 2025 15:53:13 +0800 Subject: [PATCH] update JSON parser copying json value. --- src/util/json_parser.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/util/json_parser.c b/src/util/json_parser.c index 5aaa4289..e911cd48 100644 --- a/src/util/json_parser.c +++ b/src/util/json_parser.c @@ -938,6 +938,7 @@ static int __copy_json_members(const json_object_t *src, json_object_t *dest) json_member_t *entry; json_member_t *memb; size_t len; + int ret; list_for_each(pos, &src->head) { @@ -947,10 +948,11 @@ static int __copy_json_members(const json_object_t *src, json_object_t *dest) if (!memb) return -1; - if (__copy_json_value(&entry->value, &memb->value) < 0) + ret = __copy_json_value(&entry->value, &memb->value); + if (ret < 0) { free(memb); - return -1; + return ret; } memcpy(memb->name, entry->name, len + 1); @@ -965,6 +967,7 @@ static int __copy_json_elements(const json_array_t *src, json_array_t *dest) struct list_head *pos; json_element_t *entry; json_element_t *elem; + int ret; list_for_each(pos, &src->head) { @@ -973,10 +976,11 @@ static int __copy_json_elements(const json_array_t *src, json_array_t *dest) return -1; entry = list_entry(pos, json_element_t, list); - if (__copy_json_value(&entry->value, &elem->value) < 0) + ret = __copy_json_value(&entry->value, &elem->value); + if (ret < 0) { free(elem); - return -1; + return ret; } list_add_tail(&elem->list, &dest->head); @@ -988,6 +992,7 @@ static int __copy_json_elements(const json_array_t *src, json_array_t *dest) static int __copy_json_value(const json_value_t *src, json_value_t *dest) { size_t len; + int ret; switch (src->type) { @@ -1007,24 +1012,26 @@ static int __copy_json_value(const json_value_t *src, json_value_t *dest) case JSON_VALUE_OBJECT: INIT_LIST_HEAD(&dest->value.object.head); dest->value.object.root.rb_node = NULL; - if (__copy_json_members(&src->value.object, &dest->value.object) < 0) + ret = __copy_json_members(&src->value.object, &dest->value.object); + if (ret < 0) { __destroy_json_members(&dest->value.object); - return -1; + return ret; } - dest->value.object.size = src->value.object.size; + dest->value.object.size = ret; break; case JSON_VALUE_ARRAY: INIT_LIST_HEAD(&dest->value.array.head); - if (__copy_json_elements(&src->value.array, &dest->value.array) < 0) + ret = __copy_json_elements(&src->value.array, &dest->value.array); + if (ret < 0) { __destroy_json_elements(&dest->value.array); - return -1; + return ret; } - dest->value.array.size = src->value.array.size; + dest->value.array.size = ret; break; }