From: Suyeon Hwang Date: Fri, 16 Apr 2021 04:32:34 +0000 (+0900) Subject: Make validation function for tts_client_s X-Git-Tag: submit/tizen/20210628.060348~30 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3daf21d3e654c914a9f67132d63c97a57a52b65b;p=platform%2Fcore%2Fuifw%2Ftts.git Make validation function for tts_client_s Using uid is better way to validate tts_client_s. However, using uid makes unnecessary access for tts_client_s and it makes unsafe pointer access. This patch makes function for validating tts_client_s using pointer of tts_client_s. This function is useful when the function does not use uid. Change-Id: I6f10e64bee6c32c46f78f8124d551d349af5505d Signed-off-by: Suyeon Hwang --- diff --git a/client/tts_client.c b/client/tts_client.c index b3afa626..9fbbabed 100644 --- a/client/tts_client.c +++ b/client/tts_client.c @@ -246,19 +246,44 @@ tts_client_s* tts_client_get_by_uid(const int uid) return NULL; } -bool tts_client_is_valid(int uid) +bool tts_client_is_valid_uid(int uid) { if (NULL == tts_client_get_by_uid(uid)) { - SLOG(LOG_WARN, TAG_TTSC, "[WARNING] A handle is not valid"); + SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Uid is not valid"); return false; } return true; } +bool tts_client_is_valid_client(tts_client_s* client) +{ + if (NULL == client) { + SLOG(LOG_ERROR, TAG_TTSC, "[WARNING] Client is NULL"); + return false; + } + + pthread_mutex_lock(&g_client_list_mutex); + if (g_list_length(g_client_list) > 0) { + GList *iter = g_list_first(g_client_list); + while (NULL != iter) { + if (iter->data == client) { + pthread_mutex_unlock(&g_client_list_mutex); + return true; + } + + iter = g_list_next(iter); + } + } + pthread_mutex_unlock(&g_client_list_mutex); + + SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Client(%p) is not valid", client); + return false; +} + tts_h tts_client_get_handle(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } @@ -355,7 +380,7 @@ GList* tts_client_get_client_list() void tts_client_set_current_state(tts_client_s* client, tts_state_e state) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return; } @@ -365,7 +390,7 @@ void tts_client_set_current_state(tts_client_s* client, tts_state_e state) tts_state_e tts_client_get_current_state(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return TTS_STATE_INVALID; } @@ -394,7 +419,7 @@ bool tts_client_is_listening_started(int uid) void tts_client_set_state_changed_cb(tts_client_s* client, tts_state_changed_cb callback, void* user_data) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return; } @@ -409,7 +434,7 @@ void tts_client_set_state_changed_cb(tts_client_s* client, tts_state_changed_cb void tts_client_set_utterance_started_cb(tts_client_s* client, tts_utterance_started_cb callback, void* user_data) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return; } __set_utterance_started_cb(client, callback, user_data); @@ -417,7 +442,7 @@ void tts_client_set_utterance_started_cb(tts_client_s* client, tts_utterance_sta void tts_client_set_utterance_completed_cb(tts_client_s* client, tts_utterance_completed_cb callback, void* user_data) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return; } __set_utterance_completed_cb(client, callback, user_data); @@ -425,7 +450,7 @@ void tts_client_set_utterance_completed_cb(tts_client_s* client, tts_utterance_c void tts_client_set_error_cb(tts_client_s* client, tts_error_cb callback, void* user_data) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return; } @@ -440,7 +465,7 @@ void tts_client_set_error_cb(tts_client_s* client, tts_error_cb callback, void* void tts_client_set_default_voice_changed_cb(tts_client_s* client, tts_default_voice_changed_cb callback, void* user_data) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return; } __set_default_voice_changed_cb(client, callback, user_data); @@ -448,7 +473,7 @@ void tts_client_set_default_voice_changed_cb(tts_client_s* client, tts_default_v void tts_client_set_engine_changed_cb(tts_client_s* client, tts_engine_changed_cb callback, void* user_data) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return; } __set_engine_changed_cb(client, callback, user_data); @@ -456,7 +481,7 @@ void tts_client_set_engine_changed_cb(tts_client_s* client, tts_engine_changed_c void tts_client_set_supported_voice_cb(tts_client_s* client, tts_supported_voice_cb callback, void* user_data) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return; } __set_supported_voice_cb(client, callback, user_data); @@ -464,7 +489,7 @@ void tts_client_set_supported_voice_cb(tts_client_s* client, tts_supported_voice tts_state_changed_cb tts_client_get_state_changed_cb(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->state_changed_cb; @@ -472,7 +497,7 @@ tts_state_changed_cb tts_client_get_state_changed_cb(tts_client_s* client) void* tts_client_get_state_changed_user_data(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->state_changed_user_data; @@ -480,7 +505,7 @@ void* tts_client_get_state_changed_user_data(tts_client_s* client) tts_utterance_started_cb tts_client_get_utterance_started_cb(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->utt_started_cb; @@ -488,7 +513,7 @@ tts_utterance_started_cb tts_client_get_utterance_started_cb(tts_client_s* clien void* tts_client_get_utterance_started_user_data(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->utt_started_user_data; @@ -496,7 +521,7 @@ void* tts_client_get_utterance_started_user_data(tts_client_s* client) tts_utterance_completed_cb tts_client_get_utterance_completed_cb(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->utt_completed_cb; @@ -504,7 +529,7 @@ tts_utterance_completed_cb tts_client_get_utterance_completed_cb(tts_client_s* c void* tts_client_get_utterance_completed_user_data(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->utt_completed_user_data; @@ -512,7 +537,7 @@ void* tts_client_get_utterance_completed_user_data(tts_client_s* client) tts_error_cb tts_client_get_error_cb(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->error_cb; @@ -520,7 +545,7 @@ tts_error_cb tts_client_get_error_cb(tts_client_s* client) void* tts_client_get_error_user_data(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->error_user_data; @@ -528,7 +553,7 @@ void* tts_client_get_error_user_data(tts_client_s* client) tts_default_voice_changed_cb tts_client_get_default_voice_changed_cb(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->default_voice_changed_cb; @@ -536,7 +561,7 @@ tts_default_voice_changed_cb tts_client_get_default_voice_changed_cb(tts_client_ void* tts_client_get_default_voice_changed_user_data(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->default_voice_changed_user_data; @@ -544,7 +569,7 @@ void* tts_client_get_default_voice_changed_user_data(tts_client_s* client) tts_engine_changed_cb tts_client_get_engine_changed_cb(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->engine_changed_cb; @@ -552,7 +577,7 @@ tts_engine_changed_cb tts_client_get_engine_changed_cb(tts_client_s* client) void* tts_client_get_engine_changed_user_data(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->engine_changed_user_data; @@ -560,7 +585,7 @@ void* tts_client_get_engine_changed_user_data(tts_client_s* client) tts_supported_voice_cb tts_client_get_supported_voice_cb(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->supported_voice_cb; @@ -568,7 +593,7 @@ tts_supported_voice_cb tts_client_get_supported_voice_cb(tts_client_s* client) void* tts_client_get_supported_voice_user_data(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return NULL; } return client->supported_voice_user_data; @@ -576,7 +601,7 @@ void* tts_client_get_supported_voice_user_data(tts_client_s* client) void tts_client_unset_all_cb(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { return; } diff --git a/client/tts_client.h b/client/tts_client.h index 50740903..e9b881c7 100644 --- a/client/tts_client.h +++ b/client/tts_client.h @@ -90,7 +90,8 @@ tts_client_s* tts_client_get(tts_h tts); tts_client_s* tts_client_get_by_uid(const int uid); tts_h tts_client_get_handle(tts_client_s* client); -bool tts_client_is_valid(int uid); +bool tts_client_is_valid_uid(int uid); +bool tts_client_is_valid_client(tts_client_s* client); int tts_client_get_size(); diff --git a/client/tts_core.c b/client/tts_core.c index e831846f..e44dad17 100644 --- a/client/tts_core.c +++ b/client/tts_core.c @@ -649,7 +649,7 @@ int tts_core_deinitialize() int tts_core_notify_state_changed(tts_client_s* client, tts_state_e before_state, tts_state_e current_state) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -661,7 +661,7 @@ int tts_core_notify_state_changed(tts_client_s* client, tts_state_e before_state int tts_core_notify_state_changed_async(tts_client_s* client, tts_state_e before_state, tts_state_e current_state) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -678,7 +678,7 @@ int tts_core_notify_state_changed_async(tts_client_s* client, tts_state_e before int tts_core_notify_utt_started(tts_client_s* client, int utt_id) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -702,7 +702,7 @@ int tts_core_notify_utt_started(tts_client_s* client, int utt_id) int tts_core_notify_utt_completeted(tts_client_s* client, int utt_id) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -726,7 +726,7 @@ int tts_core_notify_utt_completeted(tts_client_s* client, int utt_id) int tts_core_notify_error(tts_client_s* client, int utt_id, tts_error_e reason) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -739,7 +739,7 @@ int tts_core_notify_error(tts_client_s* client, int utt_id, tts_error_e reason) int tts_core_notify_error_async(tts_client_s* client, int utt_id, tts_error_e reason) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -759,7 +759,7 @@ int tts_core_notify_error_async(tts_client_s* client, int utt_id, tts_error_e re int tts_core_notify_default_voice_changed(tts_client_s* client, const char* before_lang, int before_voice_type, const char* language, int voice_type) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -784,7 +784,7 @@ int tts_core_notify_default_voice_changed(tts_client_s* client, const char* befo int tts_core_notify_engine_changed(tts_client_s* client, const char* engine_id, const char* language, int voice_type, bool need_credential) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -912,7 +912,7 @@ const char* tts_core_get_engine_name() int tts_core_prepare(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -933,7 +933,7 @@ int tts_core_prepare(tts_client_s* client) int tts_core_prepare_sync(tts_client_s* client) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -956,7 +956,7 @@ int tts_core_prepare_sync(tts_client_s* client) int tts_core_unprepare(tts_client_s* client, bool is_screen_reader_on) { - if (NULL == client || false == tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Handle is not valid."); return TTS_ERROR_INVALID_PARAMETER; } @@ -1027,7 +1027,7 @@ int tts_core_reprepare() while (NULL != iter) { tts_client_s* client = iter->data; - if (NULL != client && tts_client_is_valid(client->uid)) { + if (false == tts_client_is_valid_client(client)) { tts_client_set_current_state(client, TTS_STATE_CREATED); client->reason = TTS_ERROR_NONE; } diff --git a/client/tts_ipc.c b/client/tts_ipc.c index 297495e3..3cf3badf 100644 --- a/client/tts_ipc.c +++ b/client/tts_ipc.c @@ -137,7 +137,7 @@ int tts_ipc_stop_listening(int uid) { SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_stop_listening"); - if (false == tts_client_is_valid(uid)) { + if (false == tts_client_is_valid_uid(uid)) { SLOG(LOG_ERROR, TAG_TTSC, "Fail to get tts_client with uid"); return TTS_ERROR_INVALID_PARAMETER; } diff --git a/client/tts_tidl.c b/client/tts_tidl.c index e8fe6d2e..530f5dab 100644 --- a/client/tts_tidl.c +++ b/client/tts_tidl.c @@ -364,7 +364,7 @@ int tts_tidl_close_connection(int uid) int tts_tidl_stop_listening(int uid) { - if (false == tts_client_is_valid(uid)) { + if (false == tts_client_is_valid_uid(uid)) { SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not valid"); return TTS_ERROR_INVALID_PARAMETER; }