util: resource: Check data type is integer or not when getting value 17/270517/1
authorChanwoo Choi <cw00.choi@samsung.com>
Fri, 4 Feb 2022 03:28:08 +0000 (12:28 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Fri, 4 Feb 2022 03:31:29 +0000 (12:31 +0900)
Each resource_attribute has the only one data type like integer, string
and so on. When using the getter function for specific data type such as
get_resource_attr_integer(), must need to check the data type of
resource attribute.

Change-Id: I868c31011d61efe05ae8a72966db462370408977
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
include/util/resource.h
src/util/resource.c

index 49d7f45..21f22de 100644 (file)
@@ -97,6 +97,8 @@ void delete_resource(struct resource *resource);
 int update_resource_attr(struct resource *resource, u_int64_t attr_id);
 int update_resource_attrs(struct resource *resource);
 int update_resource_attrs_interest(struct resource *resource, u_int64_t attr_interest_mask);
+
+const struct resource_attribute *get_resource_attr(struct resource *resource, u_int64_t attr_id);
 struct resource_attribute_value *
 get_resource_attr_value(struct resource *resource, u_int64_t attr_id);
 int get_resource_attr_integer(struct resource *resource, u_int64_t attr_id);
index f164593..fad00aa 100644 (file)
@@ -167,6 +167,17 @@ int update_resource_attrs(struct resource *resource)
        return update_resource_attrs_interest(resource, RESOURCE_ATTR_MASK);
 }
 
+const struct resource_attribute *
+get_resource_attr(struct resource *resource, u_int64_t attr_id)
+{
+       int attr_index = RESOURCE_ATTR_INDEX(attr_id);
+
+       if (!resource || attr_index < 0 || attr_index >= resource->num_attrs)
+               return NULL;
+
+       return &resource->attrs[attr_index];
+}
+
 struct resource_attribute_value *
 get_resource_attr_value(struct resource *resource, u_int64_t attr_id)
 {
@@ -180,9 +191,15 @@ get_resource_attr_value(struct resource *resource, u_int64_t attr_id)
 
 int get_resource_attr_integer(struct resource *resource, u_int64_t attr_id)
 {
-       struct resource_attribute_value *attr_value =
-                               get_resource_attr_value(resource, attr_id);
+       const struct resource_attribute *attr = NULL;
+       struct resource_attribute_value *attr_value = NULL;
+
+       /* Check whether the data type is integer or not */
+       attr = get_resource_attr(resource, attr_id);
+       if (!attr || attr->type != DATA_TYPE_INT)
+               return -EINVAL;
 
+       attr_value = get_resource_attr_value(resource, attr_id);
        if (!attr_value)
                return -EINVAL;