Fixed memory leaks 22/71422/2
authorhyunuktak <hyunuk.tak@samsung.com>
Wed, 25 May 2016 09:44:18 +0000 (18:44 +0900)
committerhyunuktak <hyunuk.tak@samsung.com>
Wed, 8 Jun 2016 11:56:55 +0000 (20:56 +0900)
but it has below latent defect as ever.
by 0x49420E3: g_simple_async_result_complete (in /usr/lib/libgio-2.0.so.0.4400.1)

Change-Id: I5a99828ca919e9f050db2d77eafe17002c4b2921
Signed-off-by: hyunuktak <hyunuk.tak@samsung.com>
daemon/include/vpnsvc.h
daemon/src/vpn_service_daemon_main.c
daemon/src/vpndbus.c
daemon/src/vpnsvc.c
packaging/capi-vpn-service.spec

index 7e92207..3c2887a 100755 (executable)
@@ -37,6 +37,7 @@ typedef enum _net_vpn_service_privilege_e {
 } net_vpn_service_privilege_e;
 
 void vpnsvc_create_and_init(void);
+void vpnsvc_destroy_deinit(void);
 Vpnsvc *get_vpnsvc_object(void);
 gboolean vpn_service_gdbus_check_privilege(GDBusMethodInvocation *invocation,
        net_vpn_service_privilege_e _privilege);
index 1f14aaf..ff3037b 100755 (executable)
@@ -62,6 +62,7 @@ int main(void)
        g_main_loop_run(main_loop);
 
        vpnsvc_cleanup_gdbus();
+       vpnsvc_destroy_deinit();
 
        return 0;
 }
index 9c12f82..d079d84 100755 (executable)
@@ -235,6 +235,7 @@ void vpnsvc_cleanup_gdbus(void)
        LOGD("VPN Service Cleanup!");
 
        g_bus_unown_name(owner_id);
+       g_object_unref(manager_server_vpn);
 
        return;
 }
index e6a4967..123db6f 100755 (executable)
@@ -205,8 +205,7 @@ gboolean handle_vpn_up(Vpnsvc *object,
                        i = 0;
                        while (g_variant_iter_loop(&iter, "{si}", &route_dest, &route_prefix)) {
                                int temp_dest_str_len = strlen(route_dest);
-                               routes[i] = malloc((sizeof(char) * temp_dest_str_len)+1);
-                               memset(routes[i], 0, sizeof(char) * temp_dest_str_len);
+                               routes[i] = g_try_malloc0((sizeof(char) * temp_dest_str_len)+1);
                                strncpy(routes[i], route_dest, temp_dest_str_len);
                                routes[i][temp_dest_str_len] = '\0';
                                prefix[i] = route_prefix;
@@ -222,7 +221,7 @@ gboolean handle_vpn_up(Vpnsvc *object,
        if (arg_nr_dns > 0) {
                if (arg_dns_servers != NULL) {
                        GVariant *array = g_variant_get_variant(arg_dns_servers);
-                       dns_servers = (char **)malloc(arg_nr_dns*sizeof(char *));
+                       dns_servers = (char **)g_try_malloc0(arg_nr_dns*sizeof(char *));
                        if (dns_servers == NULL) {
                                LOGE("malloc failed.");
                                result = VPNSVC_ERROR_OUT_OF_MEMORY;
@@ -232,7 +231,7 @@ gboolean handle_vpn_up(Vpnsvc *object,
                        i = 0;
                        while (g_variant_iter_loop(&iter, "s", &temp_dns_server)) {
                                int temp_dns_str_len = strlen(temp_dns_server);
-                               dns_servers[i] = (char *)malloc((temp_dns_str_len+1)*sizeof(char));
+                               dns_servers[i] = (char *)g_try_malloc0((temp_dns_str_len + 1) * sizeof(char));
                                strncpy(dns_servers[i], temp_dns_server, strlen(temp_dns_server));
                                dns_servers[i][temp_dns_str_len] = '\0';
                                total_dns_string_cnt += temp_dns_str_len;
@@ -247,12 +246,17 @@ gboolean handle_vpn_up(Vpnsvc *object,
                        total_dns_string_cnt, arg_dns_suffix, arg_mtu);
 done:
        /* free pointers */
+       for (i = 0; i < arg_nr_routes; i++) {
+               if(routes[i])
+                       g_free(routes[i]);
+       }
+
        if (dns_servers) {
                for (i = 0; i < arg_nr_dns; i++) {
                        if (dns_servers[i])
-                               free(dns_servers[i]);
+                               g_free(dns_servers[i]);
                }
-               free(dns_servers);
+               g_free(dns_servers);
        }
 
        vpnsvc_complete_vpn_up(object, invocation, result);
@@ -326,8 +330,7 @@ gboolean handle_vpn_block_networks(Vpnsvc *object,
                        i = 0;
                        while (g_variant_iter_loop(&iter, "{si}", &route_dest, &route_prefix)) {
                                int tmp_route_len = strlen(route_dest);
-                               nets_vpn[i] = malloc(sizeof(char) * tmp_route_len + 1);
-                               memset(nets_vpn[i], 0, sizeof(char) * tmp_route_len);
+                               nets_vpn[i] = g_try_malloc0(sizeof(char) * tmp_route_len + 1);
                                strncpy(nets_vpn[i], route_dest, tmp_route_len);
                                nets_vpn[i][tmp_route_len] = '\0';
                                prefix_vpn[i] = route_prefix;
@@ -346,8 +349,7 @@ gboolean handle_vpn_block_networks(Vpnsvc *object,
                        i = 0;
                        while (g_variant_iter_loop(&iter, "{si}", &route_dest, &route_prefix)) {
                                int tmp_route_len = strlen(route_dest);
-                               nets_orig[i] = malloc(sizeof(char) * tmp_route_len + 1);
-                               memset(nets_orig[i], 0, sizeof(char) * tmp_route_len);
+                               nets_orig[i] = g_try_malloc0(sizeof(char) * tmp_route_len + 1);
                                strncpy(nets_orig[i], route_dest, tmp_route_len);
                                nets_orig[i][tmp_route_len] = '\0';
                                prefix_orig[i] = route_prefix;
@@ -363,6 +365,11 @@ gboolean handle_vpn_block_networks(Vpnsvc *object,
 
 done:
 
+       for (i = 0; i < arg_nr_nets_vpn; ++i) {
+               g_free(nets_orig[i]);
+               g_free(nets_vpn[i]);
+       }
+
        vpnsvc_complete_vpn_block_networks(object, invocation, result);
 
        return TRUE;
@@ -441,6 +448,13 @@ void vpnsvc_create_and_init(void)
        return;
 }
 
+void vpnsvc_destroy_deinit(void)
+{
+       LOGD("Deinit vpn object.");
+
+       if (vpnsvc)
+               g_object_unref(vpnsvc);
+}
 
 gboolean vpn_service_gdbus_check_privilege(GDBusMethodInvocation *invocation, net_vpn_service_privilege_e _privilege)
 {
@@ -506,5 +520,11 @@ gboolean vpn_service_gdbus_check_privilege(GDBusMethodInvocation *invocation, ne
        if (ret == CYNARA_API_ACCESS_ALLOWED)
                LOGD("cynara PASS");
 
+       cynara_finish(p_cynara);
+
+       g_free(client);
+       g_free(user);
+       g_free(client_session);
+
        return (ret == CYNARA_API_ACCESS_ALLOWED) ? TRUE : FALSE;
 }
index 3faea52..8638d30 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       vpnsvc-pkg
 Summary:    VPN service library in TIZEN C API
-Version:    1.0.18
+Version:    1.0.19
 Release:    1
 Group:      System/Network
 License:    Apache-2.0