Fix double free
authorIlho Kim <ilho159.kim@samsung.com>
Wed, 24 Feb 2021 15:44:40 +0000 (00:44 +0900)
committer김일호/Tizen Platform Lab(SR)/Engineer/삼성전자 <ilho159.kim@samsung.com>
Thu, 25 Feb 2021 00:25:47 +0000 (09:25 +0900)
GHashTable's pointers will be catched PkgGetDBHandler

Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
src/pkginfo_internal.c

index 3465fec..a0fe7d8 100644 (file)
 #include "pkgmgrinfo_debug.h"
 #include "pkgmgr-info.h"
 
-static void __free_packages(gpointer data)
+static void __free_packages(gpointer key, gpointer value,
+               gpointer user_data)
 {
-       pkgmgrinfo_basic_free_package((package_x *)data);
+       pkgmgrinfo_basic_free_package((package_x *)value);
 }
 
 static const char join_localized_info[] =
@@ -558,7 +559,7 @@ API int pkginfo_internal_filter_get_list(
        }
 
        list = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
-                       __free_packages);
+                       NULL);
        if (list == NULL)
                return PMINFO_R_ERROR;
 
@@ -569,8 +570,9 @@ API int pkginfo_internal_filter_get_list(
                                PMINFO_PKGINFO_GET_ALL, list);
 
        if (ret != PMINFO_R_OK) {
+               g_hash_table_foreach_remove(list, __free_packages, NULL);
                g_hash_table_destroy(list);
-               return PMINFO_R_ERROR;
+               return ret;
        }
 
        *pkginfo_list = list;