Fix memory leak 40/253740/3 submit/tizen_6.0/20210217.080545
authorCheoleun Moon <chleun.moon@samsung.com>
Wed, 17 Feb 2021 06:34:54 +0000 (15:34 +0900)
committerCheoleun Moon <chleun.moon@samsung.com>
Wed, 17 Feb 2021 07:18:32 +0000 (16:18 +0900)
Change-Id: I7aeeb39af10f8b66f44d87a902c5ce8138929fff

packaging/capi-network-wifi-manager.spec
src/network_dbus.c
src/network_interface.c
src/network_signal.c
src/wifi_internal.c

index aeeabb3a03b6216924ab7e71cdf9ce0564ef9374..bd3d9ea4f109ef6ea7fb47057c11b1f3d830e72e 100755 (executable)
@@ -1,6 +1,6 @@
 Name:          capi-network-wifi-manager
 Summary:       Network Wi-Fi library in TIZEN C API
-Version:       1.2.13
+Version:       1.2.14
 Release:       1
 Group:         System/Network
 License:       Apache-2.0
index 5c0bfbe7a5634daaf7163d8234fca8b015c575c1..d308718cfef6899c71744e2e132db79be301b41a 100755 (executable)
@@ -363,6 +363,12 @@ static void __net_open_connection_reply(GObject *source_object, GAsyncResult *re
        if (network_info->event_callback)
                network_info->event_callback(event_data, network_info->user_data);
 
+       if (prof_info.vsie_list)
+               g_slist_free_full(prof_info.vsie_list, g_free);
+
+       if (prof_info.bssid_list)
+               g_slist_free_full(prof_info.bssid_list, g_free);
+
        g_free(event_data);
 
        __NETWORK_FUNC_EXIT__;
index 91e0d84830d5f5ed160e42e5f97f494383766d02..3a70e8f2a639d7dca230a1a135e96fcc5e69d4ab 100755 (executable)
@@ -3028,6 +3028,13 @@ int net_delete_profile(network_info_s *network_info, const char* profile_name)
                        &wifi_prof_name,
                        prof_info.security_info.sec_mode,
                        prof_info.passpoint);
+
+       if (prof_info.vsie_list)
+               g_slist_free_full(prof_info.vsie_list, g_free);
+
+       if (prof_info.bssid_list)
+               g_slist_free_full(prof_info.bssid_list, g_free);
+
        if (Error != NET_ERR_NONE) {
                WIFI_LOG(WIFI_ERROR, //LCOV_EXCL_LINE
                                "Failed to delete service(profile). Error [%s]",
index ad667c852b71e89f5ddc23ef965efef5649eb1bb..fcc44a5d5f04ad1b2c95b0176e11da96754f39cb 100755 (executable)
@@ -100,9 +100,11 @@ static int __net_handle_wifi_power_rsp(network_info_s *network_info,
 
        g_variant_get(param, "(s)", &interface_name);
        if (g_strcmp0(interface_name, network_info->interface_name) != 0) {
+               g_free(interface_name);
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_NONE;
        }
+       g_free(interface_name);
 
        event_data = g_try_malloc0(sizeof(net_event_info_s));
        if (event_data == NULL) {
@@ -914,12 +916,16 @@ static int __net_handle_scan_changed(network_info_s *network_info, GVariant *par
        g_variant_get(param, "(sv)", &interface_name, &var);
 
        if (g_strcmp0(interface_name, network_info->interface_name) != 0) {
+               g_free(interface_name);
+               g_variant_unref(var);
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_NONE;
        }
 
        event_data = g_try_malloc0(sizeof(net_event_info_s));
        if (event_data == NULL) {
+               g_free(interface_name);
+               g_variant_unref(var);
                __NETWORK_FUNC_EXIT__;
                return NET_ERR_OUT_OF_MEMORY;
        }
@@ -938,6 +944,7 @@ static int __net_handle_scan_changed(network_info_s *network_info, GVariant *par
 
        g_free(event_data);
 
+       g_free(interface_name);
        g_variant_unref(var);
 
        WIFI_LOG(WIFI_INFO, "Exit Function");
@@ -955,13 +962,17 @@ static int __net_handle_scan_done(network_info_s *network_info, GVariant *param)
 
        g_variant_get(param, "(sv)", &interface_name, &value);
 
-       if (g_strcmp0(interface_name, network_info->interface_name) != 0)
+       if (g_strcmp0(interface_name, network_info->interface_name) != 0) {
+               g_free(interface_name);
+               g_variant_unref(value);
                return NET_ERR_NONE;
+       }
 
        last_scan_type = g_variant_get_int32(value);
        WIFI_LOG(WIFI_INFO, "%s last scan type: %d (0:full,1:specific,2:multi)",
                interface_name, last_scan_type);
 
+       g_free(interface_name);
        g_variant_unref(value);
 
        /* Check if any scan request is pending, if scan request is pending then
@@ -1473,10 +1484,13 @@ static int __net_handle_rssi_changed(network_info_s *network_info,
 
        g_variant_get(param, "(si)", &interface_name, &(rssi_info.rssi_level));
 
-       if (g_strcmp0(interface_name, network_info->interface_name) != 0)
+       if (g_strcmp0(interface_name, network_info->interface_name) != 0) {
+               g_free(interface_name);
                return NET_ERR_NONE;
+       }
 
        g_strlcpy(rssi_info.ifname, interface_name, strlen(interface_name) + 1);
+       g_free(interface_name);
 
        WIFI_LOG(WIFI_INFO, "Rssi changed [%s:%d]",
                rssi_info.ifname, rssi_info.rssi_level);
index 4fa15c6ecfee7f5bf3c64378183364b8e905b287..b833679417b07c8c466f6e77189bce25067a741c 100755 (executable)
@@ -1590,6 +1590,13 @@ void config_free(gpointer data)
                g_free(h->eap_config->subject_match);
                g_free(h->eap_config);
        }
+       if (h->ip_info) {
+               g_free(h->ip_info->ip_address);
+               g_free(h->ip_info->subnet_mask);
+               g_free(h->ip_info->gateway_address);
+               for (int i = 0; i < h->ip_info->dns_count; ++i)
+                       g_free(h->ip_info->dns_address[i]);
+       }
        g_free(h);
 }
 
@@ -3083,6 +3090,7 @@ int _wifi_load_configurations(wifi_manager_h wifi)
        int i;
        wifi_manager_handle_s *wifi_handle = wifi;
        GSList *config_ids = NULL;
+       GSList *head_config_ids = NULL;
 
        __clear_config_list(&(wifi_handle->config_iterator));
 
@@ -3097,6 +3105,7 @@ int _wifi_load_configurations(wifi_manager_h wifi)
                return WIFI_MANAGER_ERROR_NONE; //LCOV_EXCL_LINE
        }
 
+       head_config_ids = config_ids;
        while (config_ids) {
                bool rv = 0;
                wifi_config_s *h;
@@ -3162,8 +3171,7 @@ int _wifi_load_configurations(wifi_manager_h wifi)
                config_ids = config_ids->next;
        }
 
-       config_ids = g_slist_nth(config_ids, 0);
-       g_slist_free_full(config_ids, g_free);
+       g_slist_free_full(head_config_ids, g_free);
 
        return WIFI_MANAGER_ERROR_NONE;
 }