Fixed coverity issue : 85247 47/199047/1 accepted/tizen/unified/20190202.022432 submit/tizen/20190201.052844
authorsaerome kim <saerome.kim@samsung.com>
Fri, 1 Feb 2019 04:57:16 +0000 (13:57 +0900)
committersaerome kim <saerome.kim@samsung.com>
Fri, 1 Feb 2019 04:57:16 +0000 (13:57 +0900)
Change-Id: I980a5009c5d7f4cc11d972c57a6a4e1b5b3cc513
Signed-off-by: saerome kim <saerome.kim@samsung.com>
src/zbl-dbus.c

index afb2831..07262df 100644 (file)
@@ -542,6 +542,29 @@ static void _zbl_remove_global_req(zb_zigbee_h handle, unsigned char ep,
 }
 #endif /* ZB_FEATURE_GLOBAL_RSP_SYNC */
 
+static void __records_value_free(struct attribute_report_s **records,
+       int records_len)
+{
+       RET_IF(NULL == records);
+
+       for (int i = 0; i < records_len; i++) {
+               free(records[i]->value);
+               records[i]->value = NULL;
+       }
+}
+
+static void __records_free(struct attribute_report_s **records, int count)
+{
+       RET_IF(NULL == records);
+
+       for (int i = 0; i < count; i++) {
+               free(records[i]);
+               records[i] = NULL;
+       }
+       free(records);
+       records = NULL;
+}
+
 static void _zbl_signal_handler(GDBusConnection *connection,
                const gchar *sender_name, const gchar *object_path, const gchar *interface_name,
                const gchar *signal_name, GVariant *parameters, gpointer user_data)
@@ -791,12 +814,8 @@ static void _zbl_signal_handler(GDBusConnection *connection,
                for (j = 0; j < count; j++) {
                        records[j] = calloc(1, sizeof(struct attribute_report_s));
                        if (NULL == records[j]) {
-                               for (i = 0; i < j; i++) {
-                                       free(records[i]);
-                                       records[i] = NULL;
-                               }
-                               free(records);
-                               records = NULL;
+                               __records_value_free(records, j);
+                               __records_free(records, count);
 
                                g_variant_iter_free(attr_iter);
                                g_variant_iter_free(dataType_iter);
@@ -833,16 +852,8 @@ static void _zbl_signal_handler(GDBusConnection *connection,
                                data_size = value + 1;
                                records[j]->value = calloc(data_size, sizeof(unsigned char));
                                if (NULL == records[j]->value) {
-                                       for (i = 0; i < j; i++) {
-                                               free(records[i]->value);
-                                               records[i]->value = NULL;
-                                       }
-                                       for (i = 0; i < count; i++) {
-                                               free(records[i]);
-                                               records[i] = NULL;
-                                       }
-                                       free(records);
-                                       records = NULL;
+                                       __records_value_free(records, j);
+                                       __records_free(records, count);
 
                                        ERR("calloc() Fail(%d)", errno);
                                        goto EXIT_EVENT_HANDLER;
@@ -861,11 +872,13 @@ static void _zbl_signal_handler(GDBusConnection *connection,
                        case ZB_ZCL_LONG_OCTET_STRING:
                        case ZB_ZCL_LONG_CHARACTER_STRING:
                                if (FALSE == g_variant_iter_loop(data_iter, "(y)", &value)) {
+                                       __records_free(records, count);
                                        ERR("No Data");
                                        goto EXIT_EVENT_HANDLER;
                                }
                                dSize[0] = value;
                                if (FALSE == g_variant_iter_loop(data_iter, "(y)", &value)) {
+                                       __records_free(records, count);
                                        ERR("No Data");
                                        goto EXIT_EVENT_HANDLER;
                                }
@@ -875,16 +888,8 @@ static void _zbl_signal_handler(GDBusConnection *connection,
                                data_size += 2;
                                records[j]->value = calloc(data_size, sizeof(unsigned char));
                                if (NULL == records[j]->value) {
-                                       for (i = 0; i < j; i++) {
-                                               free(records[i]->value);
-                                               records[i]->value = NULL;
-                                       }
-                                       for (i = 0; i < count; i++) {
-                                               free(records[i]);
-                                               records[i] = NULL;
-                                       }
-                                       free(records);
-                                       records = NULL;
+                                       __records_value_free(records, j);
+                                       __records_free(records, count);
 
                                        ERR("calloc() Fail(%d)", errno);
                                        goto EXIT_EVENT_HANDLER;
@@ -896,6 +901,8 @@ static void _zbl_signal_handler(GDBusConnection *connection,
 
                                for (i = dsizeIndex; i < data_size - 2; i++) {
                                        if (FALSE == g_variant_iter_loop(data_iter, "(y)", &value)) {
+                                               __records_value_free(records, j);
+                                               __records_free(records, count);
                                                ERR("No Data");
                                                goto EXIT_EVENT_HANDLER;
                                        }
@@ -914,32 +921,16 @@ static void _zbl_signal_handler(GDBusConnection *connection,
                        default:
                                data_size = zb_zcl_get_data_size(records[j]->type);
                                if (data_size < 0) {
-                                       for (i = 0; i < j; i++) {
-                                               free(records[i]->value);
-                                               records[i]->value = NULL;
-                                       }
-                                       for (i = 0; i < count; i++) {
-                                               free(records[i]);
-                                               records[i] = NULL;
-                                       }
-                                       free(records);
-                                       records = NULL;
+                                       __records_value_free(records, j);
+                                       __records_free(records, count);
 
                                        ERR("zb_zcl_get_data_size() Fail(%d)", data_size);
                                        goto EXIT_EVENT_HANDLER;
                                }
                                records[j]->value = calloc(data_size, sizeof(unsigned char));
                                if (NULL == records[j]->value) {
-                                       for (i = 0; i < j; i++) {
-                                               free(records[i]->value);
-                                               records[i]->value = NULL;
-                                       }
-                                       for (i = 0; i < count; i++) {
-                                               free(records[i]);
-                                               records[i] = NULL;
-                                       }
-                                       free(records);
-                                       records = NULL;
+                                       __records_value_free(records, j);
+                                       __records_free(records, count);
 
                                        ERR("calloc() Fail(%d)", errno);
                                        goto EXIT_EVENT_HANDLER;
@@ -962,19 +953,8 @@ static void _zbl_signal_handler(GDBusConnection *connection,
 
                ev->data.global_attr_report = calloc(1, sizeof(zb_event_global_attr_report_s));
                if (NULL == ev->data.global_attr_report) {
-                       ERR("Failed to memory allocation !");
-                       for (j = 0; j < count; j++) {
-                               free(records[j]->value);
-                               records[j]->value = NULL;
-                               if (records[j]) {
-                                       free(records[j]);
-                                       records[j] = NULL;
-                               }
-                       }
-                       if (records) {
-                               free(records);
-                               records = NULL;
-                       }
+                       __records_value_free(records, count);
+                       __records_free(records, count);
                        goto EXIT_EVENT_HANDLER;
                }
 
@@ -983,20 +963,10 @@ static void _zbl_signal_handler(GDBusConnection *connection,
 
                container->event_handler(addr16, NULL, ZB_ZCL_GLOBAL_ATTRIBUTE_REPORT_EVENT, ev,
                        container->user_data);
-               for (j = 0; j < count; j++) {
-                       if (records[j]->value) {
-                               free(records[j]->value);
-                               records[j]->value = NULL;
-                       }
-                       if (records[j]) {
-                               free(records[j]);
-                               records[j] = NULL;
-                       }
-               }
-               if (records) {
-                       free(records);
-                       records = NULL;
-               }
+
+               __records_value_free(records, count);
+               __records_free(records, count);
+
                if (ev->data.global_attr_report) {
                        free(ev->data.global_attr_report);
                        ev->data.global_attr_report = NULL;