comp-manager: Fixed glib warnings and memory corruptions
authorSaurav Babu <saurav.babu@samsung.com>
Fri, 13 Apr 2018 11:05:38 +0000 (16:35 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 2 Jul 2018 10:38:50 +0000 (19:38 +0900)
Signed-off-by: Saurav Babu <saurav.babu@samsung.com>
capi/src/companion.c
src/companion-manager/src/comp_gdbus_group.c
src/companion-manager/src/comp_group.c
src/companion-manager/src/comp_iot.cpp

index e7a1d2c..ba075ac 100644 (file)
@@ -320,7 +320,7 @@ EXPORT_API int companion_device_send_data(companion_h handle,
        companion_device_s *dev = (companion_device_s *)device;
        companion_check_null_ret_error("dev", dev, COMP_ERROR_INVALID_PARAMETER);
 
-       buf = g_malloc0(len + 1);
+       buf = g_try_malloc0(len + 1);
        if (NULL == buf) {
                /* LCOV_EXCL_START */
                _ERR("g_malloc0 is failed");
@@ -331,7 +331,7 @@ EXPORT_API int companion_device_send_data(companion_h handle,
 
        bytearray_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
        for (i = 0; i < len; i++)
-               g_variant_builder_add(bytearray_builder, "y", data[i]);
+               g_variant_builder_add(bytearray_builder, "y", buf[i]);
 
        params = g_variant_new("(iay)", len, bytearray_builder);
        g_variant_builder_unref(bytearray_builder);
@@ -342,7 +342,7 @@ EXPORT_API int companion_device_send_data(companion_h handle,
        group_call_send_data_sync(_handle->group_proxy, dev->device_id, dev->ip,
                                                          dev->sec_port, params, &ret, NULL, &error);
 
-       free(buf);
+       g_free(buf);
        buf = NULL;
 
        return ret;
index 4b7d105..87b7b48 100644 (file)
@@ -240,7 +240,7 @@ gboolean group_send_data(Group *group, GDBusMethodInvocation *invocation,
 
        g_variant_get(params, "(iay)", &len, &iter);
 
-       data = g_try_malloc0(len);
+       data = g_try_malloc0(len + 1);
        if (NULL == data) {
                group_complete_send_data(group, invocation, -1);
                LOG_ERR("Failed to allocate memory");
index 270d772..2e888f1 100644 (file)
@@ -205,37 +205,37 @@ int comp_group_find(int timeout)
 
 GVariant *comp_group_get_found_groups()
 {
-       GVariantBuilder builder;
+       GVariantBuilder *builder;
        GVariant *group_data;
        GList *iter = NULL;
 
-       g_variant_builder_init(&builder, G_VARIANT_TYPE("aa{sv}"));
+       builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}"));
 
        iter = found_group_list;
        while (iter != NULL) {
                comp_group_t *group = (comp_group_t *)iter->data;
 
-               g_variant_builder_open(&builder, G_VARIANT_TYPE_VARDICT);
-               g_variant_builder_add(&builder, "{sv}", "URI",
+               g_variant_builder_open(builder, G_VARIANT_TYPE_VARDICT);
+               g_variant_builder_add(builder, "{sv}", "URI",
                                                          g_variant_new_string(group->uri_path));
-               g_variant_builder_add(&builder, "{sv}", "DeviceID",
+               g_variant_builder_add(builder, "{sv}", "DeviceID",
                                                          g_variant_new_string(group->device_id));
-               g_variant_builder_add(&builder, "{sv}", "GroupName",
+               g_variant_builder_add(builder, "{sv}", "GroupName",
                                                          g_variant_new_string(group->group_name));
-               g_variant_builder_add(&builder, "{sv}", "HostAddress",
+               g_variant_builder_add(builder, "{sv}", "HostAddress",
                                                          g_variant_new_string(group->host_addr));
-               g_variant_builder_add(&builder, "{sv}", "GroupDeviceType",
+               g_variant_builder_add(builder, "{sv}", "GroupDeviceType",
                                                          g_variant_new_string(group->resource_type));
                /*When we get found groups, we can get my groups also. */
-               g_variant_builder_add(&builder, "{sv}", "GroupType",
+               g_variant_builder_add(builder, "{sv}", "GroupType",
                                                          g_variant_new_int32(group->type));
-               g_variant_builder_close(&builder);
+               g_variant_builder_close(builder);
 
                iter = g_list_next(iter);
        }
 
-       group_data = g_variant_builder_end(&builder);
-       g_variant_builder_unref(&builder);
+       group_data = g_variant_builder_end(builder);
+       g_variant_builder_unref(builder);
 
        return group_data;
 }
@@ -244,7 +244,7 @@ int comp_group_add_new(char *uri_path, char *device_id, char *device_name,
                                         char *host_addr, char *resource_type, comp_group_type_e type)
 {
        comp_group_t *group;
-       GVariantBuilder builder;
+       GVariantBuilder *builder;
        GVariant *group_data;
 
        LOG_BEGIN();
@@ -259,26 +259,26 @@ int comp_group_add_new(char *uri_path, char *device_id, char *device_name,
 
        found_group_list = g_list_append(found_group_list, group);
 
-       g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
 
-       g_variant_builder_add(&builder, "{sv}", "URI",
+       g_variant_builder_add(builder, "{sv}", "URI",
                                                  g_variant_new_string(group->uri_path));
-       g_variant_builder_add(&builder, "{sv}", "DeviceID",
+       g_variant_builder_add(builder, "{sv}", "DeviceID",
                                                  g_variant_new_string(group->device_id));
-       g_variant_builder_add(&builder, "{sv}", "GroupName",
+       g_variant_builder_add(builder, "{sv}", "GroupName",
                                                  g_variant_new_string(group->group_name));
-       g_variant_builder_add(&builder, "{sv}", "HostAddress",
+       g_variant_builder_add(builder, "{sv}", "HostAddress",
                                                  g_variant_new_string(group->host_addr));
-       g_variant_builder_add(&builder, "{sv}", "GroupDeviceType",
+       g_variant_builder_add(builder, "{sv}", "GroupDeviceType",
                                                  g_variant_new_string(group->resource_type));
-       g_variant_builder_add(&builder, "{sv}", "GroupType",
+       g_variant_builder_add(builder, "{sv}", "GroupType",
                                                  g_variant_new_int32(group->type));
 
-       group_data = g_variant_builder_end(&builder);
+       group_data = g_variant_builder_end(builder);
 
        notify_group_found(group_data);
 
-       g_variant_builder_unref(&builder);
+       g_variant_builder_unref(builder);
 
        LOG_END();
 
@@ -323,53 +323,53 @@ int comp_group_add_new_mot_device(comp_mot_device_t *device)
 
 GVariant *comp_group_get_remote_mot_enabled_devices()
 {
-       GVariantBuilder builder;
+       GVariantBuilder *builder;
        GVariant *group_data;
        GList *iter = NULL;
 
        comp_remove_ip_info();
        comp_make_ip_info();
 
-       g_variant_builder_init(&builder, G_VARIANT_TYPE("aa{sv}"));
+       builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}"));
 
        iter = mot_enb_dev_list;
        while (iter != NULL) {
                comp_mot_device_t *device = (comp_mot_device_t *)iter->data;
 
-               g_variant_builder_open(&builder, G_VARIANT_TYPE_VARDICT);
-               g_variant_builder_add(&builder, "{sv}", "DeviceID",
+               g_variant_builder_open(builder, G_VARIANT_TYPE_VARDICT);
+               g_variant_builder_add(builder, "{sv}", "DeviceID",
                                                          g_variant_new_string(device->device_id));
-               g_variant_builder_add(&builder, "{sv}", "Adapter",
+               g_variant_builder_add(builder, "{sv}", "Adapter",
                                                          g_variant_new_int32(device->adapter));
-               g_variant_builder_add(&builder, "{sv}", "Flags",
+               g_variant_builder_add(builder, "{sv}", "Flags",
                                                          g_variant_new_int32(device->flags));
-               g_variant_builder_add(&builder, "{sv}", "Port",
+               g_variant_builder_add(builder, "{sv}", "Port",
                                                          g_variant_new_uint16(device->port));
-               g_variant_builder_add(&builder, "{sv}", "Address",
+               g_variant_builder_add(builder, "{sv}", "Address",
                                                          g_variant_new_string(device->addr));
-               g_variant_builder_add(&builder, "{sv}", "DeviceType",
+               g_variant_builder_add(builder, "{sv}", "DeviceType",
                                                          g_variant_new_uint16(comp_is_local_ip(device->addr)));
-               g_variant_builder_add(&builder, "{sv}", "Ifindex",
+               g_variant_builder_add(builder, "{sv}", "Ifindex",
                                                          g_variant_new_int32(device->ifindex));
-               g_variant_builder_add(&builder, "{sv}", "RouteData",
+               g_variant_builder_add(builder, "{sv}", "RouteData",
                                                          g_variant_new_string(device->route_data));
-               g_variant_builder_add(&builder, "{sv}", "ConnType",
+               g_variant_builder_add(builder, "{sv}", "ConnType",
                                                          g_variant_new_int32(device->conn_type));
-               g_variant_builder_add(&builder, "{sv}", "SecurePort",
+               g_variant_builder_add(builder, "{sv}", "SecurePort",
                                                          g_variant_new_uint16(device->secure_port));
-               g_variant_builder_add(&builder, "{sv}", "TcpPort",
+               g_variant_builder_add(builder, "{sv}", "TcpPort",
                                                          g_variant_new_uint16(device->tcp_port));
-               g_variant_builder_add(&builder, "{sv}", "SecVer",
+               g_variant_builder_add(builder, "{sv}", "SecVer",
                                                          g_variant_new_string(device->sec_ver));
-               g_variant_builder_add(&builder, "{sv}", "DeviceStatus",
+               g_variant_builder_add(builder, "{sv}", "DeviceStatus",
                                                          g_variant_new_int32(device->dev_status));
-               g_variant_builder_close(&builder);
+               g_variant_builder_close(builder);
 
                iter = g_list_next(iter);
        }
 
-       group_data = g_variant_builder_end(&builder);
-       g_variant_builder_unref(&builder);
+       group_data = g_variant_builder_end(builder);
+       g_variant_builder_unref(builder);
 
        return group_data;
 }
@@ -668,23 +668,38 @@ int comp_group_send_data(gchar *uuid_dev, gchar *addr, int port,
 
        LOG_BEGIN();
 
-       comp_command_t *cmd = g_new0(comp_command_t, 1);
+       comp_command_t *cmd = g_try_malloc0(sizeof(comp_command_t));
+       if (NULL == cmd) {
+               ret = COMP_ERROR_OUT_OF_MEMORY;
+               LOG_ERR("Failed to alloc memory");
+               return ret;
+       }
+
        cmd->command = COMP_REQ_SEND_DATA;
        cmd->uuid = g_strdup(uuid_dev);
 
        cmd->host = _addr2host(addr, port);
 
-       cmd->data = g_malloc0(len + 1);
+#ifdef SUPPORT_BASE64_ENCODING
+       cmd->data = g_try_malloc0(len + 1);
        if (NULL == cmd->data) {
                ret = COMP_ERROR_OUT_OF_MEMORY;
                LOG_ERR("Send Data Fail to uuid = %s host %s error=%s",
                        cmd->uuid, cmd->host, comp_log_get_error_string(ret));
                return ret;
        }
-#ifdef SUPPORT_BASE64_ENCODING
+
        memcpy(cmd->data, data, len);
        cmd->data_len = len;
 #else
+       cmd->arg1 = g_try_malloc0(len + 1);
+       if (NULL == cmd->arg1) {
+               ret = COMP_ERROR_OUT_OF_MEMORY;
+               LOG_ERR("Send Data Fail to uuid = %s host %s error=%s",
+                       cmd->uuid, cmd->host, comp_log_get_error_string(ret));
+               return ret;
+       }
+
        memcpy(cmd->arg1, data, len);
        cmd->arg1[len] = '\0';
 #endif
@@ -736,53 +751,53 @@ int  comp_group_add_new_mowned_device(comp_mot_device_t *device)
 
 GVariant *comp_group_get_mowned_devices()
 {
-       GVariantBuilder builder;
+       GVariantBuilder *builder;
        GVariant *group_data;
        GList *iter = NULL;
 
        comp_remove_ip_info();
        comp_make_ip_info();
 
-       g_variant_builder_init(&builder, G_VARIANT_TYPE("aa{sv}"));
+       builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}"));
 
        iter = mowned_dev_list;
        while (iter != NULL) {
                comp_mot_device_t *device = (comp_mot_device_t *)iter->data;
 
-               g_variant_builder_open(&builder, G_VARIANT_TYPE_VARDICT);
-               g_variant_builder_add(&builder, "{sv}", "DeviceID",
+               g_variant_builder_open(builder, G_VARIANT_TYPE_VARDICT);
+               g_variant_builder_add(builder, "{sv}", "DeviceID",
                                                          g_variant_new_string(device->device_id));
-               g_variant_builder_add(&builder, "{sv}", "Adapter",
+               g_variant_builder_add(builder, "{sv}", "Adapter",
                                                          g_variant_new_int32(device->adapter));
-               g_variant_builder_add(&builder, "{sv}", "Flags",
+               g_variant_builder_add(builder, "{sv}", "Flags",
                                                          g_variant_new_int32(device->flags));
-               g_variant_builder_add(&builder, "{sv}", "Port",
+               g_variant_builder_add(builder, "{sv}", "Port",
                                                          g_variant_new_uint16(device->port));
-               g_variant_builder_add(&builder, "{sv}", "Address",
+               g_variant_builder_add(builder, "{sv}", "Address",
                                                          g_variant_new_string(device->addr));
-               g_variant_builder_add(&builder, "{sv}", "DeviceType",
+               g_variant_builder_add(builder, "{sv}", "DeviceType",
                                                          g_variant_new_uint16(comp_is_local_ip(device->addr)));
-               g_variant_builder_add(&builder, "{sv}", "Ifindex",
+               g_variant_builder_add(builder, "{sv}", "Ifindex",
                                                          g_variant_new_int32(device->ifindex));
-               g_variant_builder_add(&builder, "{sv}", "RouteData",
+               g_variant_builder_add(builder, "{sv}", "RouteData",
                                                          g_variant_new_string(device->route_data));
-               g_variant_builder_add(&builder, "{sv}", "ConnType",
+               g_variant_builder_add(builder, "{sv}", "ConnType",
                                                          g_variant_new_int32(device->conn_type));
-               g_variant_builder_add(&builder, "{sv}", "SecurePort",
+               g_variant_builder_add(builder, "{sv}", "SecurePort",
                                                          g_variant_new_uint16(device->secure_port));
-               g_variant_builder_add(&builder, "{sv}", "TcpPort",
+               g_variant_builder_add(builder, "{sv}", "TcpPort",
                                                          g_variant_new_uint16(device->tcp_port));
-               g_variant_builder_add(&builder, "{sv}", "SecVer",
+               g_variant_builder_add(builder, "{sv}", "SecVer",
                                                          g_variant_new_string(device->sec_ver));
-               g_variant_builder_add(&builder, "{sv}", "DeviceStatus",
+               g_variant_builder_add(builder, "{sv}", "DeviceStatus",
                                                          g_variant_new_int32(device->dev_status));
-               g_variant_builder_close(&builder);
+               g_variant_builder_close(builder);
 
                iter = g_list_next(iter);
        }
 
-       group_data = g_variant_builder_end(&builder);
-       g_variant_builder_unref(&builder);
+       group_data = g_variant_builder_end(builder);
+       g_variant_builder_unref(builder);
 
        return group_data;
 }
@@ -798,45 +813,45 @@ void comp_group_change_mowned_device(comp_mot_device_t *device)
 
 GVariant *comp_group_get_my_mowned_devices()
 {
-       GVariantBuilder builder;
+       GVariantBuilder *builder;
        GVariant *group_data;
 
        comp_remove_ip_info();
        comp_make_ip_info();
 
-       g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
 
        if (my_device != NULL) {
-               g_variant_builder_add(&builder, "{sv}", "DeviceID",
+               g_variant_builder_add(builder, "{sv}", "DeviceID",
                                                          g_variant_new_string(my_device->device_id));
-               g_variant_builder_add(&builder, "{sv}", "Adapter",
+               g_variant_builder_add(builder, "{sv}", "Adapter",
                                                          g_variant_new_int32(my_device->adapter));
-               g_variant_builder_add(&builder, "{sv}", "Flags",
+               g_variant_builder_add(builder, "{sv}", "Flags",
                                                          g_variant_new_int32(my_device->flags));
-               g_variant_builder_add(&builder, "{sv}", "Port",
+               g_variant_builder_add(builder, "{sv}", "Port",
                                                          g_variant_new_uint16(my_device->port));
-               g_variant_builder_add(&builder, "{sv}", "Address",
+               g_variant_builder_add(builder, "{sv}", "Address",
                                                          g_variant_new_string(my_device->addr));
-               g_variant_builder_add(&builder, "{sv}", "DeviceType",
+               g_variant_builder_add(builder, "{sv}", "DeviceType",
                                                          g_variant_new_uint16(comp_is_local_ip(my_device->addr)));
-               g_variant_builder_add(&builder, "{sv}", "Ifindex",
+               g_variant_builder_add(builder, "{sv}", "Ifindex",
                                                          g_variant_new_int32(my_device->ifindex));
-               g_variant_builder_add(&builder, "{sv}", "RouteData",
+               g_variant_builder_add(builder, "{sv}", "RouteData",
                                                          g_variant_new_string(my_device->route_data));
-               g_variant_builder_add(&builder, "{sv}", "ConnType",
+               g_variant_builder_add(builder, "{sv}", "ConnType",
                                                          g_variant_new_int32(my_device->conn_type));
-               g_variant_builder_add(&builder, "{sv}", "SecurePort",
+               g_variant_builder_add(builder, "{sv}", "SecurePort",
                                                          g_variant_new_uint16(my_device->secure_port));
-               g_variant_builder_add(&builder, "{sv}", "TcpPort",
+               g_variant_builder_add(builder, "{sv}", "TcpPort",
                                                          g_variant_new_uint16(my_device->tcp_port));
-               g_variant_builder_add(&builder, "{sv}", "SecVer",
+               g_variant_builder_add(builder, "{sv}", "SecVer",
                                                          g_variant_new_string(my_device->sec_ver));
-               g_variant_builder_add(&builder, "{sv}", "DeviceStatus",
+               g_variant_builder_add(builder, "{sv}", "DeviceStatus",
                                                          g_variant_new_int32(my_device->dev_status));
        }
 
-       group_data = g_variant_builder_end(&builder);
-       g_variant_builder_unref(&builder);
+       group_data = g_variant_builder_end(builder);
+       g_variant_builder_unref(builder);
 
        return group_data;
 }
index c134d64..3cc21de 100755 (executable)
@@ -423,7 +423,7 @@ OCEntityHandlerResult _request_handler(std::shared_ptr<OCResourceRequest> reques
                                                          payload_len);
 
                                        outSize = B64DECODE_OUT_SAFESIZE(payload_len + 1);
-                                       out = (uint8_t *)g_malloc0(outSize);
+                                       out = (uint8_t *)g_try_malloc0(outSize);
                                        if (NULL == out) {
                                                LOG_ERR("Can't allocate memory for base64 str");
                                                return OC_EH_OK;
@@ -432,6 +432,7 @@ OCEntityHandlerResult _request_handler(std::shared_ptr<OCResourceRequest> reques
                                        if (B64_OK != b64Decode(data.c_str(), payload_len, out,
                                                                                   outSize, &len)) {
                                                LOG_ERR("Base64 decoding failed.");
+                                               g_free(out);
                                                return OC_EH_OK;
                                        }
 
@@ -439,6 +440,8 @@ OCEntityHandlerResult _request_handler(std::shared_ptr<OCResourceRequest> reques
                                        memcpy(arg, out, len);
                                        arg_len = len;
 
+                                       g_free(out);
+
                                        LOG_DEBUG("Successfully decoded from base64");
 #else
                                        if (!rep.getValue("data", data))
@@ -622,7 +625,7 @@ static void _on_post(const HeaderOptions& /*headerOptions*/,
 
        notify_send_data_finish("RESP_DATA", last_get_result);
 
-       _clear_user_data(user_data);
+       //_clear_user_data(cmd);
 }
 
 static bool _found_resource(std::shared_ptr<OCResource> resource,
@@ -848,14 +851,13 @@ int comp_iot_send_data(comp_resource_type_e resource_type, int timeout,
                case COMP_REQ_SEND_DATA:
 #ifdef SUPPORT_BASE64_ENCODING
                        b64BufSize = B64ENCODE_OUT_SAFESIZE((cmd->data_len + 1));
-                       b64Buf = (char *) g_malloc0(b64BufSize);
+                       b64Buf = (char *) g_try_malloc0(b64BufSize + 1);
                        if (NULL == b64Buf) {
                                _clear_user_data(cmd);
                                return TRUE;
                        }
                        b64Encode(cmd->data, cmd->data_len,
                                          b64Buf, b64BufSize, &outSize);
-                       b64Buf[b64BufSize] = '\0';
                        rep.setValue("data", std::string(b64Buf));
                        LOG_DEBUG("b64BufSize =%d outSize = %d b64Buf = %s",
                                          b64BufSize, outSize, b64Buf);