From 5f3359bf425e35ae121531771c055b484ee680ca Mon Sep 17 00:00:00 2001 From: Lee Dongyeol Date: Tue, 4 Dec 2012 17:39:57 +0900 Subject: [PATCH] Fix the prevent issue --- client/tts_client.c | 2 +- debian/changelog | 7 +++++ server/ttsd_config.c | 56 ++++++++++++++++++++++----------- server/ttsd_dbus.c | 2 +- server/ttsd_dbus_server.c | 77 ++++++++++++++++++++++++++-------------------- server/ttsd_engine_agent.c | 34 ++++++++++---------- server/ttsd_player.cpp | 50 +++++++++++++++++++----------- server/ttsd_server.cpp | 6 ++-- 8 files changed, 143 insertions(+), 91 deletions(-) diff --git a/client/tts_client.c b/client/tts_client.c index 7179b2a..88e831f 100644 --- a/client/tts_client.c +++ b/client/tts_client.c @@ -39,7 +39,7 @@ int tts_client_new(tts_h* tts) tts_client_s* client = NULL; client = (tts_client_s*)g_malloc0 (sizeof(tts_client_s)); - tts_h temp = (tts_h)g_malloc0(sizeof(tts_h)); + tts_h temp = (tts_h)g_malloc0(sizeof(struct tts_s)); temp->handle = __client_generate_uid(getpid()); /* initialize client data */ diff --git a/debian/changelog b/debian/changelog index 807ad68..9444ef1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +tts (0.1.1-40slp2+1) unstable; urgency=low + + * Fix prevent + * Git: framework/uifw/voice/tts + + -- Dongyeol Lee Tue, 04 Dec 2012 16:40:08 +0900 + tts (0.1.1-39slp2+1) unstable; urgency=low * Remove dependency of openssl diff --git a/server/ttsd_config.c b/server/ttsd_config.c index 0ca99ce..c30cc27 100644 --- a/server/ttsd_config.c +++ b/server/ttsd_config.c @@ -87,39 +87,59 @@ int __ttsd_config_load() } /* Read engine id */ - fscanf(config_fp, "%s %s", buf_id, buf_param); - if (0 == strncmp(ENGINE_ID, buf_id, strlen(ENGINE_ID))) { - g_engine_id = strdup(buf_param); - } else { + if (EOF == fscanf(config_fp, "%s %s", buf_id, buf_param)) { fclose(config_fp); - SLOG(LOG_WARN, TAG_TTSD, "[Config WARNING] Fail to load config (engine id)"); + SLOG(LOG_WARN, TAG_TTSD, "[Config WARNING] Fail to read config (engine id)"); __ttsd_config_save(); return -1; + } else { + if (0 == strncmp(ENGINE_ID, buf_id, strlen(ENGINE_ID))) { + g_engine_id = strdup(buf_param); + } else { + fclose(config_fp); + SLOG(LOG_WARN, TAG_TTSD, "[Config WARNING] Fail to load config (engine id)"); + __ttsd_config_save(); + return -1; + } } + + /* Read voice */ - fscanf(config_fp, "%s %s %d", buf_id, buf_param, &int_param); - if (0 == strncmp(VOICE, buf_id, strlen(VOICE))) { - g_language = strdup(buf_param); - g_vc_type = int_param; - } else { + if (EOF == fscanf(config_fp, "%s %s %d", buf_id, buf_param, &int_param)) { fclose(config_fp); - SLOG(LOG_WARN, TAG_TTSD, "[Config WARNING] Fail to load config (voice)"); + SLOG(LOG_WARN, TAG_TTSD, "[Config WARNING] Fail to read config (voice)"); __ttsd_config_save(); return -1; + } else { + if (0 == strncmp(VOICE, buf_id, strlen(VOICE))) { + g_language = strdup(buf_param); + g_vc_type = int_param; + } else { + fclose(config_fp); + SLOG(LOG_WARN, TAG_TTSD, "[Config WARNING] Fail to load config (voice)"); + __ttsd_config_save(); + return -1; + } } - + /* Read speed */ - fscanf(config_fp, "%s %d", buf_id, &int_param); - if (0 == strncmp(SPEED, buf_id, strlen(SPEED))) { - g_speed = int_param; - } else { + if (EOF == fscanf(config_fp, "%s %d", buf_id, &int_param)) { fclose(config_fp); - SLOG(LOG_WARN, TAG_TTSD, "[Config WARNING] Fail to load config (speed)"); + SLOG(LOG_WARN, TAG_TTSD, "[Config WARNING] Fail to read config (speed)"); __ttsd_config_save(); return -1; + } else { + if (0 == strncmp(SPEED, buf_id, strlen(SPEED))) { + g_speed = int_param; + } else { + fclose(config_fp); + SLOG(LOG_WARN, TAG_TTSD, "[Config WARNING] Fail to load config (speed)"); + __ttsd_config_save(); + return -1; + } } - + fclose(config_fp); SLOG(LOG_DEBUG, TAG_TTSD, "[Config] Load config : engine(%s), voice(%s,%d), speed(%d)", diff --git a/server/ttsd_dbus.c b/server/ttsd_dbus.c index 199fa0c..89dde48 100644 --- a/server/ttsd_dbus.c +++ b/server/ttsd_dbus.c @@ -186,7 +186,7 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle msg = dbus_connection_pop_message(conn); /* loop again if we haven't read a message */ - if (NULL == msg) { + if (NULL == msg || NULL == conn) { return ECORE_CALLBACK_RENEW; } diff --git a/server/ttsd_dbus_server.c b/server/ttsd_dbus_server.c index 5a632a6..0e2f32e 100644 --- a/server/ttsd_dbus_server.c +++ b/server/ttsd_dbus_server.c @@ -199,14 +199,16 @@ int ttsd_dbus_server_get_support_voices(DBusConnection* conn, DBusMessage* msg) while (NULL != iter) { voice = iter->data; - dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(voice->language) ); - dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(voice->type) ); + if (NULL != voice) { + dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(voice->language) ); + dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(voice->type) ); - if (NULL != voice->language) - g_free(voice->language); - if (NULL != voice); + if (NULL != voice->language) + g_free(voice->language); + g_free(voice); - + } + voice_list = g_list_remove_link(voice_list, iter); iter = g_list_first(voice_list); @@ -655,22 +657,25 @@ int ttsd_dbus_server_setting_get_engine_list(DBusConnection* conn, DBusMessage* while (NULL != iter) { engine = iter->data; - SLOG(LOG_DEBUG, TAG_TTSD, "engine id : %s, engine name : %s, ug_name, : %s", - engine->engine_id, engine->engine_name, engine->ug_name); - - dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(engine->engine_id) ); - dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(engine->engine_name) ); - dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(engine->ug_name) ); - - if (NULL != engine->engine_id) - g_free(engine->engine_id); - if (NULL != engine->engine_name); - g_free(engine->engine_name); - if (NULL != engine->ug_name); - g_free(engine->ug_name); - if (NULL != engine); + + if (NULL != engine) { + SLOG(LOG_DEBUG, TAG_TTSD, "engine id : %s, engine name : %s, ug_name, : %s", + engine->engine_id, engine->engine_name, engine->ug_name); + + dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(engine->engine_id) ); + dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(engine->engine_name) ); + dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(engine->ug_name) ); + + if (NULL != engine->engine_id) + g_free(engine->engine_id); + if (NULL != engine->engine_name) + g_free(engine->engine_name); + if (NULL != engine->ug_name) + g_free(engine->ug_name); + g_free(engine); - + } + engine_list = g_list_remove_link(engine_list, iter); iter = g_list_first(engine_list); @@ -858,13 +863,15 @@ int ttsd_dbus_server_setting_get_voice_list(DBusConnection* conn, DBusMessage* m while (NULL != iter) { voice = iter->data; - dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(voice->language) ); - dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(voice->type) ); + if (NULL != voice) { + dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(voice->language) ); + dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(voice->type) ); + + if (NULL != voice->language) + g_free(voice->language); - if (NULL != voice->language) - g_free(voice->language); - if (NULL != voice); g_free(voice); + } voice_list = g_list_remove_link(voice_list, iter); @@ -1168,16 +1175,18 @@ int ttsd_dbus_server_setting_get_engine_setting(DBusConnection* conn, DBusMessag while (NULL != iter) { setting = iter->data; - dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(setting->key) ); - dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(setting->value) ); + if (NULL != setting) { + dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(setting->key) ); + dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(setting->value) ); - if (NULL != setting->key) - g_free(setting->key); - if (NULL != setting->value) - g_free(setting->value); - if (NULL != setting); + if (NULL != setting->key) + g_free(setting->key); + if (NULL != setting->value) + g_free(setting->value); + g_free(setting); - + } + engine_setting_list = g_list_remove_link(engine_setting_list, iter); iter = g_list_first(engine_setting_list); diff --git a/server/ttsd_engine_agent.c b/server/ttsd_engine_agent.c index 06bb623..64867d5 100644 --- a/server/ttsd_engine_agent.c +++ b/server/ttsd_engine_agent.c @@ -350,8 +350,8 @@ int __internal_get_engine_info(const char* filepath, ttsengine_info_s** info) int (*get_engine_info)(ttsp_engine_info_cb callback, void* user_data); get_engine_info = (int (*)(ttsp_engine_info_cb, void*))dlsym(handle, "ttsp_get_engine_info"); - if ((error = dlerror()) != NULL) { - SLOG(LOG_WARN, TAG_TTSD, "[Engine Agent] ttsp_get_engine_info() link error\n"); + if (NULL != (error = dlerror()) || NULL == get_engine_info) { + SLOG(LOG_WARN, TAG_TTSD, "[Engine Agent] ttsp_get_engine_info() link error"); dlclose(handle); return TTSD_ERROR_OPERATION_FAILED; } @@ -361,7 +361,7 @@ int __internal_get_engine_info(const char* filepath, ttsengine_info_s** info) /* get engine info */ if (0 != get_engine_info(&__engine_info_cb, (void*)temp)) { - SLOG(LOG_ERROR, TAG_TTSD, "[Engine Agent ERROR] fail to get engine info\n"); + SLOG(LOG_ERROR, TAG_TTSD, "[Engine Agent ERROR] fail to get engine info"); dlclose(handle); g_free(temp); return TTSD_ERROR_OPERATION_FAILED; @@ -373,11 +373,11 @@ int __internal_get_engine_info(const char* filepath, ttsengine_info_s** info) temp->engine_path = g_strdup(filepath); SLOG(LOG_DEBUG, TAG_TTSD, "----- Valid engine"); - SLOG(LOG_DEBUG, TAG_TTSD, "Engine uuid : %s\n", temp->engine_uuid); - SLOG(LOG_DEBUG, TAG_TTSD, "Engine name : %s\n", temp->engine_name); - SLOG(LOG_DEBUG, TAG_TTSD, "Setting ug path : %s\n", temp->setting_ug_path); - SLOG(LOG_DEBUG, TAG_TTSD, "Engine path : %s\n", temp->engine_path); - SLOG(LOG_DEBUG, TAG_TTSD, "Use network : %s\n", temp->use_network ? "true":"false"); + SLOG(LOG_DEBUG, TAG_TTSD, "Engine uuid : %s", temp->engine_uuid); + SLOG(LOG_DEBUG, TAG_TTSD, "Engine name : %s", temp->engine_name); + SLOG(LOG_DEBUG, TAG_TTSD, "Setting ug path : %s", temp->setting_ug_path); + SLOG(LOG_DEBUG, TAG_TTSD, "Engine path : %s", temp->engine_path); + SLOG(LOG_DEBUG, TAG_TTSD, "Use network : %s", temp->use_network ? "true":"false"); SLOG(LOG_DEBUG, TAG_TTSD, "-----"); SLOG(LOG_DEBUG, TAG_TTSD, " "); @@ -454,9 +454,9 @@ int __internal_update_engine_list() filepath = (char*)g_malloc0( sizeof(char) * file_size); if (NULL != filepath) { - strncpy(filepath, ENGINE_DIRECTORY_DOWNLOAD, strlen(ENGINE_DIRECTORY_DOWNLOAD) ); - strncat(filepath, "/", strlen("/") ); - strncat(filepath, dirp->d_name, strlen(dirp->d_name) ); + strcpy(filepath, ENGINE_DIRECTORY_DOWNLOAD); + strcat(filepath, "/"); + strcat(filepath, dirp->d_name); } else { SLOG(LOG_ERROR, TAG_TTSD, "[Engine Agent ERROR] Not enough memory!! \n" ); continue; @@ -588,7 +588,7 @@ int ttsd_engine_agent_load_current_engine() } g_cur_engine.ttsp_load_engine = (int (*)(const ttspd_funcs_s* , ttspe_funcs_s*) )dlsym(g_cur_engine.handle, "ttsp_load_engine"); - if ((error = dlerror()) != NULL) { + if (NULL != (error = dlerror()) || NULL == g_cur_engine.ttsp_load_engine) { SLOG(LOG_ERROR, TAG_TTSD, "[Engine Agent ERROR] fail to link daemon to ttsp_load_engine() of current engine \n"); return -3; } @@ -1503,11 +1503,13 @@ void __free_voice_list(GList* voice_list) while (NULL != iter) { data = iter->data; - if (NULL != data->language) - g_free(data->language); - if (NULL != data); - g_free(data); + if (NULL != data) { + if (NULL != data->language) + g_free(data->language); + g_free(data); + } + voice_list = g_list_remove_link(voice_list, iter); iter = g_list_first(voice_list); diff --git a/server/ttsd_player.cpp b/server/ttsd_player.cpp index 20ebb27..9410f6f 100644 --- a/server/ttsd_player.cpp +++ b/server/ttsd_player.cpp @@ -229,15 +229,15 @@ int ttsd_player_destroy_instance(int uid) /* Get handle data from list */ data = (player_s*)iter->data; - /* compare uid */ - if (uid == data->uid) { - g_player_list = g_list_remove_link(g_player_list, iter); - if (NULL != data) { + if (NULL != data) { + /* compare uid */ + if (uid == data->uid) { + g_player_list = g_list_remove_link(g_player_list, iter); g_free(data); + break; } - break; - } - + } + /* Get next item */ iter = g_list_next(iter); } @@ -627,14 +627,20 @@ static Eina_Bool __player_next_play(void *data) int* uid = (int*)data; + if (NULL == uid) { + SLOG(LOG_ERROR, TAG_TTSD, "[PLAYER ERROR] uid is NULL"); + SLOG(LOG_DEBUG, TAG_TTSD, "====="); + SLOG(LOG_DEBUG, TAG_TTSD, " "); + return EINA_FALSE; + } + SLOG(LOG_DEBUG, TAG_TTSD, "[PLAYER] uid = %d", *uid); if (0 != ttsd_player_next_play(*uid)) { SLOG(LOG_WARN, TAG_TTSD, "[PLAYER WARNING] Fail to play next"); } - if (NULL != uid) - free(uid); + free(uid); SLOG(LOG_DEBUG, TAG_TTSD, "====="); SLOG(LOG_DEBUG, TAG_TTSD, " "); @@ -718,7 +724,12 @@ static int msg_callback(int message, void *data, void *user_param) g_playing_info = current; app_state_e state; - ttsd_data_get_client_state(uid, &state); + if (0 != ttsd_data_get_client_state(uid, &state)) { + SLOG(LOG_ERROR, TAG_TTSD, "[PLAYER ERROR] uid is not valid : %d", uid); + SLOG(LOG_DEBUG, TAG_TTSD, "====="); + SLOG(LOG_DEBUG, TAG_TTSD, " "); + break; + } /* for sync problem */ if (APP_STATE_PAUSED == state) { @@ -746,6 +757,10 @@ static int msg_callback(int message, void *data, void *user_param) case MM_MESSAGE_END_OF_STREAM: { SLOG(LOG_DEBUG, TAG_TTSD, "===== END OF STREAM CALLBACK"); + + if (NULL == user_data) + break; + remove(user_data->filename); /* Check uid */ @@ -764,8 +779,7 @@ static int msg_callback(int message, void *data, void *user_param) return -1; } - if (NULL != user_data) - g_free(user_data); + g_free(user_data); int pid = ttsd_data_get_pid(uid); @@ -843,18 +857,18 @@ player_s* __player_get_item(int uid) int __save_file(const int uid, const int index, const sound_data_s data, char** filename) { char postfix[5]; - memset(postfix, 0, 5); + memset(postfix, '\0', 5); switch (data.audio_type) { case TTSP_AUDIO_TYPE_RAW: case TTSP_AUDIO_TYPE_WAV: - strncpy(postfix, "wav", strlen("wav")); + strcpy(postfix, "wav"); break; case TTSP_AUDIO_TYPE_MP3: - strncpy(postfix, "mp3", strlen("mp3")); + strcpy(postfix, "mp3"); break; case TTSP_AUDIO_TYPE_AMR: - strncpy(postfix, "amr", strlen("amr")); + strcpy(postfix, "amr"); break; default: SLOG(LOG_ERROR, TAG_TTSD, "[Player ERROR] Audio type(%d) is NOT valid", data.audio_type); @@ -866,7 +880,7 @@ int __save_file(const int uid, const int index, const sound_data_s data, char** temp = *filename; snprintf(temp, FILE_PATH_SIZE, "%s/ttstemp%d_%d.%s", TEMP_FILE_PATH, uid, index, postfix ); - + FILE* fp; fp = fopen(temp, "wb"); @@ -941,7 +955,7 @@ int __set_and_start(player_s* player) } g_index++; - if (65534 <= g_index) { + if (10000 <= g_index) { g_index = 1; } diff --git a/server/ttsd_server.cpp b/server/ttsd_server.cpp index 3bf737d..706bcf8 100644 --- a/server/ttsd_server.cpp +++ b/server/ttsd_server.cpp @@ -294,9 +294,6 @@ int __synthesis_result_callback(ttsp_result_event_e event, const void* data, uns utterance_t* utt_get_param; utt_get_param = (utterance_t*)user_data; - int uid = utt_get_param->uid; - int uttid = utt_get_param->uttid; - if (NULL == utt_get_param) { SLOG(LOG_ERROR, TAG_TTSD, "[SERVER ERROR] User data is NULL " ); SLOG(LOG_DEBUG, TAG_TTSD, "====="); @@ -304,6 +301,9 @@ int __synthesis_result_callback(ttsp_result_event_e event, const void* data, uns return -1; } + int uid = utt_get_param->uid; + int uttid = utt_get_param->uttid; + /* Synthesis is success */ if (TTSP_RESULT_EVENT_START == event || TTSP_RESULT_EVENT_CONTINUE == event || TTSP_RESULT_EVENT_FINISH == event) { -- 2.7.4