Add null checker and strdup checker 97/111697/3
authorsooyeon.kim <sooyeon.kim@samsung.com>
Mon, 23 Jan 2017 11:56:12 +0000 (20:56 +0900)
committersooyeon.kim <sooyeon.kim@samsung.com>
Mon, 23 Jan 2017 12:32:14 +0000 (21:32 +0900)
Change-Id: I7113002c5758cbd69f742dbd471944e08de30d8a
Signed-off-by: sooyeon.kim <sooyeon.kim@samsung.com>
common/tts_config_mgr.c

index 8259e2c..10d1952 100755 (executable)
@@ -87,7 +87,7 @@ int __tts_config_mgr_check_engine_is_valid(const char* engine_id)
                        return -1;
                }
 
-               if (0 == strcmp(engine_id, engine_info->uuid)) {
+               if (NULL != engine_info->uuid && 0 == strcmp(engine_id, engine_info->uuid)) {
                        SLOG(LOG_DEBUG, tts_tag(), "Default engine is valid : %s", engine_id);
                        return 0;
                }
@@ -108,11 +108,25 @@ int __tts_config_mgr_check_engine_is_valid(const char* engine_id)
                return TTS_CONFIG_ERROR_OPERATION_FAILED;
        }
 
-       if (NULL != g_config_info->engine_id)   free(g_config_info->engine_id);
-       if (NULL != g_config_info->setting)     free(g_config_info->setting);
+       if (NULL != engine_info->uuid) {
+               if (NULL != g_config_info->engine_id) {
+                       free(g_config_info->engine_id);
+                       g_config_info->engine_id = NULL;
+               }
+               g_config_info->engine_id = strdup(engine_info->uuid);
+       }
+       if (NULL != engine_info->setting) {
+               if (NULL != g_config_info->setting) {
+                       free(g_config_info->setting);
+                       g_config_info->setting = NULL;
+               }
+               g_config_info->setting = strdup(engine_info->setting);
+       }
 
-       g_config_info->engine_id = strdup(engine_info->uuid);
-       g_config_info->setting = strdup(engine_info->setting);
+       if (NULL == g_config_info->engine_id || NULL == g_config_info->setting) {
+               SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to strdup engine_info");
+               return -1;
+       }
 
        SLOG(LOG_DEBUG, tts_tag(), "Default engine is changed : %s", g_config_info->engine_id);
 
@@ -136,7 +150,12 @@ int __tts_config_mgr_check_engine_is_valid(const char* engine_id)
                                                is_valid_voice = true;
 
                                                free(g_config_info->language);
+                                               g_config_info->language = NULL;
                                                g_config_info->language = strdup(voice->language);
+                                               if (NULL == g_config_info->language) {
+                                                       SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to strdup language");
+                                                       return TTS_CONFIG_ERROR_OPERATION_FAILED;
+                                               }
                                                g_config_info->type = voice->type;
 
                                                SLOG(LOG_DEBUG, tts_tag(), "Default voice is changed : lang(%s) type(%d)", voice->language, voice->type);
@@ -153,6 +172,7 @@ int __tts_config_mgr_check_engine_is_valid(const char* engine_id)
                /* Select first voice as default */
                if (NULL != g_config_info->language) {
                        free(g_config_info->language);
+                       g_config_info->language = NULL;
 
                        iter_voice = g_slist_nth(engine_info->voices, 0);
                        if (NULL == iter_voice) {
@@ -167,6 +187,10 @@ int __tts_config_mgr_check_engine_is_valid(const char* engine_id)
                        }
 
                        g_config_info->language = strdup(voice->language);
+                       if (NULL == g_config_info->language) {
+                               SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to strdup language");
+                               return TTS_CONFIG_ERROR_OPERATION_FAILED;
+                       }
                        g_config_info->type = voice->type;
                        SLOG(LOG_DEBUG, tts_tag(), "Default voice is changed : lang(%s) type(%d)", voice->language, voice->type);
                }
@@ -354,16 +378,28 @@ Eina_Bool tts_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handl
                /* engine changed */
                if (NULL != engine || NULL != setting) {
                        if (NULL != engine) {
-                               if (NULL != g_config_info->engine_id)
+                               if (NULL != g_config_info->engine_id) {
                                        free(g_config_info->engine_id);
+                                       g_config_info->engine_id = NULL;
+                               }
 
                                g_config_info->engine_id = strdup(engine);
+                               if (NULL == g_config_info->engine_id) {
+                                       SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to strdup engine_id");
+                                       return ECORE_CALLBACK_DONE;
+                               }
                        }
                        if (NULL != setting) {
-                               if (NULL != g_config_info->setting)
+                               if (NULL != g_config_info->setting) {
                                        free(g_config_info->setting);
+                                       g_config_info->setting = NULL;
+                               }
 
                                g_config_info->setting = strdup(setting);
+                               if (NULL == g_config_info->setting) {
+                                       SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to strdup setting");
+                                       return ECORE_CALLBACK_DONE;
+                               }
                        }
 
                        SECURE_SLOG(LOG_DEBUG, tts_tag(), "Engine change(%s)", g_config_info->engine_id);
@@ -399,10 +435,15 @@ Eina_Bool tts_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handl
                        before_type = g_config_info->type;
 
                        if (NULL != lang) {
-                               if (NULL != g_config_info->language)
+                               if (NULL != g_config_info->language) {
                                        free(g_config_info->language);
+                                       g_config_info->language = NULL;
+                               }
 
                                g_config_info->language = strdup(lang);
+                               if (NULL == g_config_info->language) {
+                                       SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to strdup lang");
+                               }
                        }
                        if (-1 != voice_type) {
                                g_config_info->type = voice_type;
@@ -567,7 +608,12 @@ int __tts_config_set_auto_language()
                before_type = g_config_info->type;
 
                free(g_config_info->language);
+               g_config_info->language = NULL;
                g_config_info->language = strdup(temp_lang);
+               if (NULL == g_config_info->language) {
+                       SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to strdup temp_lang");
+                       return -1;
+               }
 
                SECURE_SLOG(LOG_DEBUG, tts_tag(), "[Config] Default voice : lang(%s) type(%d)", 
                        g_config_info->language, g_config_info->type);
@@ -638,12 +684,18 @@ int __tts_config_set_auto_language()
 
                if (NULL != g_config_info->language) {
                        free(g_config_info->language);
+                       g_config_info->language = NULL;
                        g_config_info->language = strdup(tmp_language);
+                       if (NULL == g_config_info->language) {
+                               SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to strdup tmp_language");
+                               return -1;
+                       }
                }
 
                g_config_info->type = tmp_type;
 
                free(tmp_language);
+               tmp_language = NULL;
        }
 
        return 0;
@@ -1130,7 +1182,12 @@ int tts_config_mgr_initialize(int uid)
                        if (NULL != tmp_language) {
                                if (NULL != g_config_info->language) {
                                        free(g_config_info->language);
+                                       g_config_info->language = NULL;
                                        g_config_info->language = strdup(tmp_language);
+                                       if (NULL == g_config_info->language) {
+                                               SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to strdup tmp_language");
+                                               return TTS_CONFIG_ERROR_OPERATION_FAILED;
+                                       }
                                }
 
                                g_config_info->type = tmp_type;
@@ -1498,8 +1555,10 @@ int tts_config_mgr_set_engine(const char* engine)
                        continue;
                }
 
-               if (NULL != g_config_info->engine_id)
+               if (NULL != g_config_info->engine_id) {
                        free(g_config_info->engine_id);
+                       g_config_info->engine_id = NULL;
+               }
 
                g_config_info->engine_id = strdup(engine);
 
@@ -1545,6 +1604,7 @@ int tts_config_mgr_set_engine(const char* engine)
                if (false == is_valid_voice) {
                        if (NULL != g_config_info->language) {
                                free(g_config_info->language);
+                               g_config_info->language = NULL;
 
                                iter_voice = g_slist_nth(engine_info->voices, 0);
                                if (NULL != iter_voice) {
@@ -1688,7 +1748,12 @@ int tts_config_mgr_set_voice(const char* language, int type)
                        return TTS_CONFIG_ERROR_OPERATION_FAILED;
                }
                free(g_config_info->language);
+               g_config_info->language = NULL;
                g_config_info->language = strdup(language);
+               if (NULL == g_config_info->language) {
+                       SLOG(LOG_ERROR, tts_tag(), "Fail to strdup language");
+                       return TTS_CONFIG_ERROR_OPERATION_FAILED;
+               }
                g_config_info->type = type;
 
        } else {