Make validation function for tts_client_s 02/257102/2
authorSuyeon Hwang <stom.hwang@samsung.com>
Fri, 16 Apr 2021 04:32:34 +0000 (13:32 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Thu, 27 May 2021 04:45:11 +0000 (13:45 +0900)
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 <stom.hwang@samsung.com>
client/tts_client.c
client/tts_client.h
client/tts_core.c
client/tts_ipc.c
client/tts_tidl.c

index b3afa62..9fbbabe 100644 (file)
@@ -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;
        }
 
index 5074090..e9b881c 100644 (file)
@@ -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();
 
index e831846..e44dad1 100644 (file)
@@ -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;
                        }
index 297495e..3cf3bad 100644 (file)
@@ -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;
        }
index e8fe6d2..530f5da 100644 (file)
@@ -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;
        }