Remove memory leakage on tts_core and tts_engine_parser 15/258615/2
authorSuyeon Hwang <stom.hwang@samsung.com>
Fri, 21 May 2021 05:15:43 +0000 (14:15 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Fri, 21 May 2021 07:24:39 +0000 (16:24 +0900)
Change-Id: I2bdba5074f9ca97af8b40b181fc5653c8e0a7a9f
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
client/tts_core.c
engine-parser/src/tts-engine-parser.c
server/ttsd_tidl.c

index 65727f626d7daf6251430bcdd9291ef5cd29bcca..e1cd6aebf91a6d323aa1f159d0dfcb7fad698945 100644 (file)
@@ -76,14 +76,15 @@ static const char* __convert_state(tts_state_e state)
 }
 
 static char* __get_engine_appid(int mode) {
-       char* appid = NULL;
-       appid = (char*)calloc(sizeof(char), 256);
+       if (NULL == g_engine_name) {
+               return NULL;
+       }
 
-       if (NULL == appid || NULL == g_engine_name) {
+       char* appid = (char*)calloc(256, sizeof(char));
+       if (NULL == appid) {
                return NULL;
        }
 
-       memset(appid, '\0', 256);
        if (TTS_MODE_DEFAULT == mode) {
                snprintf(appid, 256, "%s", g_engine_name);
        } else if (TTS_MODE_NOTIFICATION == mode) {
@@ -92,7 +93,11 @@ static char* __get_engine_appid(int mode) {
                snprintf(appid, 256, "%s-sr", g_engine_name);
        } else if (TTS_MODE_INTERRUPT == mode) {
                snprintf(appid, 256, "%s-interrupt", g_engine_name);
+       } else {
+               free(appid);
+               return NULL;
        }
+
        return appid;
 }
 
index 57128a27d18a256fe1f5232b4cc7ba9c4a36954e..a9e2789c837c7e169cd59af182c97415e5c193ff 100644 (file)
@@ -750,6 +750,10 @@ int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList *
                        LOGD("[DEBUG] user info");
                        if (NULL != home_dir) {
                                LOGD("[DEBUG] uid(%d), gid(%d),  user_type(%s), home_dir(%s)", uid, gid, user_type, home_dir);
+                               FREE(g_dir_config_base);
+                               FREE(g_dir_home);
+                               FREE(g_dir_engine_base);
+                               FREE(g_dir_engine_info);
 
                                g_dir_config_base = (char*)calloc(strlen(home_dir) + 14, sizeof(char));
                                g_dir_home = (char*)calloc(strlen(home_dir) + 18, sizeof(char));
@@ -780,11 +784,6 @@ int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList *
                                        LOGE("[ERROR] Fail to make engine info file");
                                }
 
-                               FREE(g_dir_config_base)
-                               FREE(g_dir_home)
-                               FREE(g_dir_engine_base)
-                               FREE(g_dir_engine_info)
-
                                G_FREE(home_dir)
                        }
 
@@ -995,6 +994,7 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList
                        }
 
                        if (NULL != home_dir) {
+                               FREE(g_dir_engine_info);
                                g_dir_engine_info = (char*)calloc(strlen(home_dir) + 34, sizeof(char));
                                if (NULL == g_dir_engine_info) {
                                        gum_user_service_list_free(users);
@@ -1019,7 +1019,6 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList
                                }
 
                                G_FREE(home_dir)
-                               FREE(g_dir_engine_info)
                        }
                        G_FREE(user_type)
 
index a841093691287e9ac03062bafd9dc3173f7d6672..7e54416d1664eb6ee68b1e0d98ff508ad3af4c53 100644 (file)
@@ -237,10 +237,11 @@ static int __set_private_cb(rpc_port_stub_tts_context_h context, int uid, const
 static int __get_private_cb(rpc_port_stub_tts_context_h context, int uid, const char *key, char **data, void *user_data)
 {
        SLOG(LOG_DEBUG, tts_tag(), ">>>>> TTS GET PRIVATE DATA");
-       char *tmp = NULL;
 
+       char *tmp = NULL;
        if (0 != ttsd_server_get_private_data(uid, key, &tmp)) {
-               return -1;
+               free(tmp);
+               return TTSD_ERROR_OPERATION_FAILED;
        }
 
        *data = tmp;