Fixed svace issue 78/205878/2 accepted/tizen/unified/20190512.221853 submit/tizen/20190510.065918
authorsaerome kim <saerome.kim@samsung.com>
Fri, 10 May 2019 05:08:41 +0000 (14:08 +0900)
committersaerome kim <saerome.kim@samsung.com>
Fri, 10 May 2019 06:55:34 +0000 (15:55 +0900)
- 313737: Fixed memory leak of missing freeing.
- 319198, 321029: we change whenever we call the GET function,
   the Callback must be called, and it is modified to release
   the allocated memory at all times.
- 372686, 372690: Added memory allocation function.

Change-Id: I9a1fcbba5ed8f149e93e6b3c96c1140dd36a1618
Signed-off-by: saerome kim <saerome.kim@samsung.com>
src/mdg-manager/src/mdgd_group.c
src/mdg-manager/src/mdgd_iot.cpp
src/mdg-manager/src/mdgd_iot_client.cpp
src/mdg-manager/src/mdgd_iot_server.cpp
src/mdg-manager/src/mdgd_util.c

index 2aa6aae926e8007fcd5a4d9c567489758d551b38..ae659f57689bb76847d6b576e88e0e413243ec03 100644 (file)
@@ -55,6 +55,35 @@ int mdgd_group_delete(char *name)
 
                if (mdgd_db_check_device_exist((char *)devices[i]) == false)
                        mdgd_iot_unpair(name, devices[i]->device_id);
+
+               if (devices[i]) {
+                       if (devices[i]->device_id) {
+                               free(devices[i]->device_id);
+                               devices[i]->device_id = NULL;
+                       }
+                       if (devices[i]->model_name) {
+                               free(devices[i]->model_name);
+                               devices[i]->model_name = NULL;
+                       }
+                       if (devices[i]->device_name) {
+                               free(devices[i]->device_name);
+                               devices[i]->device_name = NULL;
+                       }
+                       if (devices[i]->platform_ver) {
+                               free(devices[i]->platform_ver);
+                               devices[i]->platform_ver = NULL;
+                       }
+                       if (devices[i]->vendor_id) {
+                               free(devices[i]->vendor_id);
+                               devices[i]->vendor_id = NULL;
+                       }
+                       if (devices[i]->profile) {
+                               free(devices[i]->profile);
+                               devices[i]->profile = NULL;
+                       }
+                       free(devices[i]);
+                       devices[i] = NULL;
+               }
        }
 
        /* delete group */
index dccb803d4aca9a5ff5c5420d99a07104a3496e3f..df0857f2afc2c374a0a9d60d4b7e3f4c71325a12 100644 (file)
@@ -348,12 +348,30 @@ int mdgd_iot_find_devices(char *sender, int timeout, bool is_invited)
                }
 
                mdgd_command_t *cmd = (mdgd_command_t *)g_try_malloc0(sizeof(mdgd_command_t));
+               if (NULL == cmd) {
+                       return MDGD_ERROR_OUT_OF_MEMORY;
+               }
                mdgd_device_t *device = (mdgd_device_t *)g_try_malloc0(sizeof(mdgd_device_t));
+               if (NULL == device) {
+                       g_free(cmd);
+                       return MDGD_ERROR_OUT_OF_MEMORY;
+               }
 
                int port = selDev->endpoint.port;
                int conn_type = selDev->connType;
                char *addr = g_strdup(selDev->endpoint.addr);
+               if (NULL == addr) {
+                       g_free(cmd);
+                       g_free(device);
+                       return MDGD_ERROR_OUT_OF_MEMORY;
+               }
                char *host_addr = mdgd_addr2host(addr, port, false);
+               if (NULL == device) {
+                       g_free(cmd);
+                       g_free(device);
+                       g_free(addr);
+                       return MDGD_ERROR_OUT_OF_MEMORY;
+               }
 
                device->device_id = uuid_str;
                device->is_invited = is_invited;
index 2a248e4c60911a784e807d8f9a912ff0851c5b25..d69f2e04138253fbc72574b60ce80b7a5502e7b8 100644 (file)
@@ -386,19 +386,83 @@ int mdgd_iot_discovery_resource(mdgd_resource_type_e resource_type,
        return ret;
 }
 
+static void __clear_mdgd_command_t(mdgd_command_t *cmd)
+{
+       mdgd_check_null_ret("cmd", cmd);
+
+       if (cmd->uuid) {
+               g_free(cmd->uuid);
+               cmd->uuid = NULL;
+       }
+       if (cmd->addr) {
+               g_free(cmd->addr);
+               cmd->addr = NULL;
+       }
+       if (cmd->sender) {
+               g_free(cmd->sender);
+               cmd->sender = NULL;
+       }
+       if (cmd->arg1) {
+               g_free(cmd->arg1);
+               cmd->arg1 = NULL;
+       }
+       if (cmd->arg2) {
+               g_free(cmd->arg2);
+               cmd->arg2 = NULL;
+       }
+       if (cmd->arg3) {
+               g_free(cmd->arg3);
+               cmd->arg3 = NULL;
+       }
+       g_free(cmd);
+       cmd = NULL;
+}
+
+void __clear_mdgd_device_t(mdgd_device_t *device)
+{
+       mdgd_check_null_ret("device", device);
+
+       if (device->device_id) {
+               g_free(device->device_id);
+               device->device_id = NULL;
+       }
+       if (device->model_name) {
+               g_free(device->model_name);
+               device->model_name = NULL;
+       }
+       if (device->platform_ver) {
+               g_free(device->platform_ver);
+               device->platform_ver = NULL;
+       }
+       if (device->profile) {
+               g_free(device->profile);
+               device->profile = NULL;
+       }
+       if (device->device_name) {
+               g_free(device->device_name);
+               device->device_name = NULL;
+       }
+       if (device->vendor_id) {
+               g_free(device->vendor_id);
+               device->vendor_id = NULL;
+       }
+       g_free(device);
+       device = NULL;
+}
+
 void __get_device_description(const HeaderOptions &headerOptions,
                              const OCRepresentation &rep, const int eCode, void *user_data)
 {
        mdgd_check_null_ret("user_data", user_data);
 
+       mdgd_command_t *cmd = (mdgd_command_t *)user_data;
+       mdgd_device_t *device = (mdgd_device_t *)cmd->user_data;
+
        LOG_BEGIN();
 
        try {
                if (eCode == OC_STACK_OK || eCode == OC_STACK_RESOURCE_CREATED ||
                    eCode == OC_STACK_RESOURCE_CHANGED) {
-                       mdgd_check_null_ret("user_data", user_data);
-                       mdgd_command_t *cmd = (mdgd_command_t *)user_data;
-                       mdgd_device_t *device = (mdgd_device_t *)cmd->user_data;
 
                        std::string modelName;
                        std::string platformVer;
@@ -422,6 +486,7 @@ void __get_device_description(const HeaderOptions &headerOptions,
                        device->type = MDGD_DEVICE_TYPE_REMOTE;
                        /* Store device information in data structure */
                        mdgd_group_notify_event(cmd->sender, MDGD_EVENT_DEVICE_FOUND, MDGD_ERROR_NONE, (void *)device);
+
                } else {
                        LOG_ERR("__get_device_description Response error %d", eCode);
                }
@@ -429,6 +494,9 @@ void __get_device_description(const HeaderOptions &headerOptions,
                LOG_ERR("Exception %s in on get", e.what());
        }
 
+       __clear_mdgd_device_t(device);
+       __clear_mdgd_command_t(cmd);
+
        LOG_END();
 }
 
index e544cf0749489acd804f9db261fb2df8eec0f63e..f161e5307c310b163bdc81e314467324f3e8b866 100644 (file)
@@ -347,6 +347,7 @@ OCEntityHandlerResult _request_handler(std::shared_ptr<OCResourceRequest> reques
 
                                                        LOG_DEBUG("sender is %s", sender);
                                                        mdgd_group_notify_event(sender, MDGD_EVENT_RECEIVE_OPEN_CHANNEL, result, channel);
+                                                       mdgd_clean_channel(channel);
                                                }
 
                                                break;
index 68906d0c822d0271d1958a4955bcc28cc7327750..78f43cc0d726a5fa1260c9ebcf7a55bbe342926d 100644 (file)
@@ -255,6 +255,11 @@ void mdgd_clean_channel(mdgd_channel_t *channel)
                channel->channel_id = NULL;
        }
 
+       if (channel->remote_address) {
+               g_free(channel->remote_address);
+               channel->remote_address = NULL;
+       }
+
        g_free(channel);
        channel = NULL;
 }