From f8132f932dd3ab26e7e93b23b18efc00a16f898c Mon Sep 17 00:00:00 2001 From: Eric Haszlakiewicz Date: Sat, 29 Oct 2016 15:31:31 -0400 Subject: [PATCH] Issue #280: add a few assert() calls to ensure objects are of the appropriate type. --- json_object.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/json_object.c b/json_object.c index 365a76b..939eae6 100644 --- a/json_object.c +++ b/json_object.c @@ -12,6 +12,7 @@ #include "config.h" +#include #include #include #include @@ -451,6 +452,8 @@ int json_object_object_add_ex(struct json_object* jso, struct json_object *const val, const unsigned opts) { + assert(json_object_get_type(jso) == json_type_object); + // We lookup the entry and replace the value, rather than just deleting // and re-adding it, so the existing key remains valid. json_object *existing_value = NULL; @@ -489,6 +492,7 @@ int json_object_object_add(struct json_object* jso, const char *key, int json_object_object_length(const struct json_object *jso) { + assert(json_object_get_type(jso) == json_type_object); return lh_table_length(jso->o.c_object); } @@ -523,6 +527,7 @@ json_bool json_object_object_get_ex(const struct json_object* jso, const char *k void json_object_object_del(struct json_object* jso, const char *key) { + assert(json_object_get_type(jso) == json_type_object); lh_table_delete(jso->o.c_object, key); } @@ -1045,6 +1050,7 @@ struct array_list* json_object_get_array(const struct json_object *jso) void json_object_array_sort(struct json_object *jso, int(*sort_fn)(const void *, const void *)) { + assert(json_object_get_type(jso) == json_type_array); array_list_sort(jso->o.c_array, sort_fn); } @@ -1055,6 +1061,7 @@ struct json_object* json_object_array_bsearch( { struct json_object **result; + assert(json_object_get_type(jso) == json_type_array); result = (struct json_object **)array_list_bsearch( (const void **)&key, jso->o.c_array, sort_fn); @@ -1065,23 +1072,33 @@ struct json_object* json_object_array_bsearch( size_t json_object_array_length(const struct json_object *jso) { + assert(json_object_get_type(jso) == json_type_array); return array_list_length(jso->o.c_array); } int json_object_array_add(struct json_object *jso,struct json_object *val) { + assert(json_object_get_type(jso) == json_type_array); return array_list_add(jso->o.c_array, val); } int json_object_array_put_idx(struct json_object *jso, size_t idx, struct json_object *val) { + assert(json_object_get_type(jso) == json_type_array); return array_list_put_idx(jso->o.c_array, idx, val); } +int json_object_array_del_idx(struct json_object *jso, size_t idx, size_t count) +{ + assert(json_object_get_type(jso) == json_type_array); + return array_list_del_idx(jso->o.c_array, idx, count); +} + struct json_object* json_object_array_get_idx(const struct json_object *jso, size_t idx) { + assert(json_object_get_type(jso) == json_type_array); return (struct json_object*)array_list_get_idx(jso->o.c_array, idx); } @@ -1108,6 +1125,8 @@ static int json_object_all_values_equal(struct json_object* jso1, struct json_object_iter iter; struct json_object *sub; + assert(json_object_get_type(jso1) == json_type_object); + assert(json_object_get_type(jso2) == json_type_object); /* Iterate over jso1 keys and see if they exist and are equal in jso2 */ json_object_object_foreachC(jso1, iter) { if (!lh_table_lookup_ex(jso2->o.c_object, (void*)iter.key, @@ -1167,7 +1186,3 @@ int json_object_equal(struct json_object* jso1, struct json_object* jso2) return 0; } -int json_object_array_del_idx(struct json_object *jso, size_t idx, size_t count) -{ - return array_list_del_idx(jso->o.c_array, idx, count); -} -- 2.49.0