From 0e274c7ae7253df438eff9ebd3bdbe90a314174d Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Wed, 19 Apr 2023 20:16:11 +0900 Subject: [PATCH] Fix static analysis issue This patch includes this changes to resolve potential issues: - Add code for checking return value of the function. - Move the local variable definition to minimize the valid scope of each variables. Change-Id: I8b7b977d45e37eaec27177f3de4e1c5cc6e5cc37 Signed-off-by: Suyeon Hwang --- common/stt_config_mgr.c | 217 ++++++++++++-------------------------------- common/stt_engine.c | 5 +- server/sttd_dbus_server.c | 14 +-- tests/src/stt_unittests.cpp | 19 +++- 4 files changed, 82 insertions(+), 173 deletions(-) diff --git a/common/stt_config_mgr.c b/common/stt_config_mgr.c index 3f3555b..91fc8b3 100644 --- a/common/stt_config_mgr.c +++ b/common/stt_config_mgr.c @@ -54,19 +54,15 @@ bool __stt_config_mgr_check_lang_is_valid(const char* engine_id, const char* lan return false; } - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; - if (0 >= g_slist_length(g_engine_list)) { SLOG(LOG_ERROR, TAG_STTCONFIG, "[ERROR] There is no engine!!"); return false; } /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL == engine_info) { SLOG(LOG_ERROR, TAG_STTCONFIG, "[ERROR] Engine info is NULL"); @@ -78,16 +74,14 @@ bool __stt_config_mgr_check_lang_is_valid(const char* engine_id, const char* lan continue; } - GSList *iter_lang = NULL; - char* engine_lang; if (g_slist_length(engine_info->languages) > 0) { /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); + GSList *iter_lang = g_slist_nth(engine_info->languages, 0); int i = 1; while (NULL != iter_lang) { /*Get handle data from list*/ - engine_lang = iter_lang->data; + char* engine_lang = iter_lang->data; SLOG(LOG_DEBUG, TAG_STTCONFIG, " [%dth] %s", i, engine_lang); @@ -113,19 +107,15 @@ int __stt_config_mgr_select_lang(const char* engine_id, char** language) return STT_CONFIG_ERROR_INVALID_PARAMETER; } - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; - if (0 >= g_slist_length(g_engine_list)) { SLOG(LOG_ERROR, TAG_STTCONFIG, "[ERROR] There is no engine!!"); return STT_CONFIG_ERROR_OPERATION_FAILED; } /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL == engine_info) { SLOG(LOG_ERROR, TAG_STTCONFIG, "engine info is NULL"); @@ -178,9 +168,6 @@ Eina_Bool stt_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handl int silence = -1; int credential = -1; - GSList *iter = NULL; - stt_config_client_s* temp_client = NULL; - if (0 != stt_parser_find_config_changed(&engine, &setting, &auto_lang, &lang, &silence, &credential)) return ECORE_CALLBACK_PASS_ON; @@ -207,10 +194,10 @@ Eina_Bool stt_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handl if (-1 != credential) g_config_info->credential = credential; /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); + GSList *iter = g_slist_nth(g_config_client_list, 0); while (NULL != iter) { - temp_client = iter->data; + stt_config_client_s *temp_client = iter->data; if (NULL != temp_client) { if (NULL != temp_client->engine_cb) { @@ -238,10 +225,9 @@ Eina_Bool stt_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handl } /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - + GSList *iter = g_slist_nth(g_config_client_list, 0); while (NULL != iter) { - temp_client = iter->data; + stt_config_client_s *temp_client = iter->data; if (NULL != temp_client) { if (NULL != temp_client->lang_cb) { @@ -262,10 +248,9 @@ Eina_Bool stt_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handl g_config_info->silence_detection = silence; /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - + GSList *iter = g_slist_nth(g_config_client_list, 0); while (NULL != iter) { - temp_client = iter->data; + stt_config_client_s *temp_client = iter->data; if (NULL != temp_client) { if (NULL != temp_client->bool_cb) { @@ -373,13 +358,9 @@ int __stt_config_set_auto_language() SLOG(LOG_DEBUG, TAG_STTCONFIG, "[Config] Language is auto. Set default language(%s)", g_config_info->language); /* Call all callbacks of client*/ - GSList *iter = NULL; - stt_config_client_s* temp_client = NULL; - - iter = g_slist_nth(g_config_client_list, 0); - + GSList *iter = g_slist_nth(g_config_client_list, 0); while (NULL != iter) { - temp_client = iter->data; + stt_config_client_s *temp_client = iter->data; if (NULL != temp_client) { if (NULL != temp_client->lang_cb) { @@ -417,13 +398,9 @@ int __stt_config_set_auto_language() SLOG(LOG_DEBUG, TAG_STTCONFIG, "[Config] Language is auto but display lang is not supported. Default language change(%s)", tmp_language); /* Call all callbacks of client*/ - GSList *iter = NULL; - stt_config_client_s* temp_client = NULL; - - iter = g_slist_nth(g_config_client_list, 0); - + GSList *iter = g_slist_nth(g_config_client_list, 0); while (NULL != iter) { - temp_client = iter->data; + stt_config_client_s *temp_client = iter->data; if (NULL != temp_client) { if (NULL != temp_client->lang_cb) { @@ -456,15 +433,11 @@ void __stt_config_language_changed_cb(keynode_t *key, void *data) void __stt_config_release_client(unsigned int uid) { - GSList *iter = NULL; - stt_config_client_s* temp_client = NULL; - if (0 < g_slist_length(g_config_client_list)) { /* Check uid */ - iter = g_slist_nth(g_config_client_list, 0); - + GSList *iter = g_slist_nth(g_config_client_list, 0); while (NULL != iter) { - temp_client = iter->data; + stt_config_client_s *temp_client = iter->data; if (NULL != temp_client) { if (uid == temp_client->uid) { @@ -487,16 +460,11 @@ void __stt_config_release_client(unsigned int uid) void __stt_config_release_engine() { - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; - if (0 < g_slist_length(g_engine_list)) { - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL != engine_info) { g_engine_list = g_slist_remove(g_engine_list, engine_info); @@ -575,8 +543,6 @@ int __stt_config_mgr_check_engine_is_valid(const char* engine_id) } /* Engine is valid*/ - GSList *iter_lang = NULL; - char* lang; bool is_valid_lang = false; if (0 >= g_slist_length(engine_info->languages)) { @@ -585,11 +551,10 @@ int __stt_config_mgr_check_engine_is_valid(const char* engine_id) } /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); - + GSList *iter_lang = g_slist_nth(engine_info->languages, 0); while (NULL != iter_lang) { /*Get handle data from list*/ - lang = iter_lang->data; + char *lang = iter_lang->data; SLOG(LOG_DEBUG, TAG_STTCONFIG, " %s", lang); if (NULL != lang) { @@ -607,7 +572,7 @@ int __stt_config_mgr_check_engine_is_valid(const char* engine_id) if (false == is_valid_lang) { iter_lang = g_slist_nth(engine_info->languages, 0); if (NULL != iter_lang) { - lang = iter_lang->data; + char *lang = iter_lang->data; if (NULL != lang) { if (NULL != g_config_info->language) free(g_config_info->language); @@ -869,15 +834,11 @@ int stt_config_mgr_initialize(unsigned int uid) int stt_config_mgr_finalize(unsigned int uid) { - GSList *iter = NULL; - stt_config_client_s* temp_client = NULL; - if (0 < g_slist_length(g_config_client_list)) { /* Check uid */ - iter = g_slist_nth(g_config_client_list, 0); - + GSList *iter = g_slist_nth(g_config_client_list, 0); while (NULL != iter) { - temp_client = iter->data; + stt_config_client_s *temp_client = iter->data; if (NULL != temp_client) { if (uid == temp_client->uid) { @@ -897,15 +858,11 @@ int stt_config_mgr_finalize(unsigned int uid) return STT_CONFIG_ERROR_NONE; } - stt_engine_info_s *engine_info = NULL; - if (0 < g_slist_length(g_engine_list)) { - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL != engine_info) { g_engine_list = g_slist_remove(g_engine_list, engine_info); @@ -931,14 +888,10 @@ int stt_config_mgr_finalize(unsigned int uid) int stt_config_mgr_set_callback(unsigned int uid, stt_config_engine_changed_cb engine_cb, stt_config_lang_changed_cb lang_cb, stt_config_bool_changed_cb bool_cb, void* user_data) { - GSList *iter = NULL; - stt_config_client_s* temp_client = NULL; - /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - + GSList *iter = g_slist_nth(g_config_client_list, 0); while (NULL != iter) { - temp_client = iter->data; + stt_config_client_s *temp_client = iter->data; if (NULL != temp_client) { if (uid == temp_client->uid) { @@ -958,14 +911,10 @@ int stt_config_mgr_set_callback(unsigned int uid, stt_config_engine_changed_cb e //LCOV_EXCL_START int stt_config_mgr_unset_callback(unsigned int uid) { - GSList *iter = NULL; - stt_config_client_s* temp_client = NULL; - /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - + GSList *iter = g_slist_nth(g_config_client_list, 0); while (NULL != iter) { - temp_client = iter->data; + stt_config_client_s *temp_client = iter->data; if (NULL != temp_client) { if (uid == temp_client->uid) { @@ -994,19 +943,15 @@ int stt_config_mgr_get_engine_list(stt_config_supported_engine_cb callback, void return STT_CONFIG_ERROR_INVALID_PARAMETER; } - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; - if (0 >= g_slist_length(g_engine_list)) { SLOG(LOG_WARN, TAG_STTCONFIG, "[ERROR] Engine list is NULL"); return STT_CONFIG_ERROR_ENGINE_NOT_FOUND; } /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL == engine_info) { SLOG(LOG_ERROR, TAG_STTCONFIG, " Engine info is NULL"); @@ -1131,15 +1076,12 @@ int stt_config_mgr_set_engine(const char* engine) return ret; } - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; bool is_valid_engine = false; /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL == engine_info) { SLOG(LOG_ERROR, TAG_STTCONFIG, "[ERROR] Engine info is NULL"); @@ -1172,16 +1114,13 @@ int stt_config_mgr_set_engine(const char* engine) } /* Engine is valid*/ - GSList *iter_lang = NULL; - char* lang; bool is_valid_lang = false; /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); - + GSList *iter_lang = g_slist_nth(engine_info->languages, 0); while (NULL != iter_lang) { /*Get handle data from list*/ - lang = iter_lang->data; + char *lang = iter_lang->data; SLOG(LOG_DEBUG, TAG_STTCONFIG, " %s", lang); if (NULL != lang && NULL != g_config_info->language) { @@ -1211,8 +1150,7 @@ int stt_config_mgr_set_engine(const char* engine) break; } - lang = iter_lang->data; - + char *lang = iter_lang->data; g_config_info->language = strdup(lang); } } @@ -1265,10 +1203,7 @@ int stt_config_mgr_get_engine_agreement(const char* engine, char** agreement) return STT_CONFIG_ERROR_INVALID_PARAMETER; } - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; char* current_engine = NULL; - if (NULL == engine) { current_engine = strdup(g_config_info->engine_id); if (NULL == current_engine) { @@ -1284,10 +1219,9 @@ int stt_config_mgr_get_engine_agreement(const char* engine, char** agreement) } /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL == engine_info) { SLOG(LOG_ERROR, TAG_STTCONFIG, "[ERROR] engine info is NULL"); @@ -1326,14 +1260,10 @@ int stt_config_mgr_get_language_list(const char* engine_id, stt_config_supported return STT_CONFIG_ERROR_ENGINE_NOT_FOUND; } - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL == engine_info) { SLOG(LOG_ERROR, TAG_STTCONFIG, "[ERROR] engine info is NULL"); //LCOV_EXCL_LINE @@ -1345,16 +1275,11 @@ int stt_config_mgr_get_language_list(const char* engine_id, stt_config_supported continue; } - GSList *iter_lang = NULL; - char* lang; - /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); - + GSList *iter_lang = g_slist_nth(engine_info->languages, 0); while (NULL != iter_lang) { /*Get handle data from list*/ - lang = iter_lang->data; - + char* lang = iter_lang->data; if (NULL != lang) { SLOG(LOG_DEBUG, TAG_STTCONFIG, " %s", lang); if (false == callback(engine_info->uuid, lang, user_data)) @@ -1504,14 +1429,10 @@ bool stt_config_check_default_engine_is_valid(const char* engine) if (0 >= g_slist_length(g_engine_list)) return false; - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL != engine_info && NULL != engine_info->uuid) { if (0 == strcmp(engine, engine_info->uuid)) { @@ -1543,14 +1464,10 @@ bool stt_config_check_default_language_is_valid(const char* language) if (0 >= g_slist_length(g_engine_list)) return false; - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; if (NULL == engine_info) { SLOG(LOG_ERROR, TAG_STTCONFIG, "[ERROR] Engine info is NULL"); @@ -1563,14 +1480,10 @@ bool stt_config_check_default_language_is_valid(const char* language) continue; } - GSList *iter_lang = NULL; - char* lang; - /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); - + GSList *iter_lang = g_slist_nth(engine_info->languages, 0); while (NULL != iter_lang) { - lang = iter_lang->data; + char* lang = iter_lang->data; if (0 == strcmp(language, lang)) return true; @@ -1587,9 +1500,6 @@ bool stt_config_check_default_language_is_valid(const char* language) int __stt_config_mgr_print_engine_info() { - GSList *iter = NULL; - stt_engine_info_s *engine_info = NULL; - if (0 >= g_slist_length(g_engine_list)) { SLOG(LOG_DEBUG, TAG_STTCONFIG, "-------------- engine list -----------------"); //LCOV_EXCL_LINE SLOG(LOG_DEBUG, TAG_STTCONFIG, " No Engine in engine directory"); //LCOV_EXCL_LINE @@ -1597,14 +1507,12 @@ int __stt_config_mgr_print_engine_info() return 0; } - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - SLOG(LOG_DEBUG, TAG_STTCONFIG, "--------------- engine list -----------------"); - + /* Get a first item */ int i = 1; + GSList *iter = g_slist_nth(g_engine_list, 0); while (NULL != iter) { - engine_info = iter->data; + stt_engine_info_s *engine_info = iter->data; SLOG(LOG_DEBUG, TAG_STTCONFIG, "[%dth]", i); SLOG(LOG_DEBUG, TAG_STTCONFIG, " name : %s", engine_info->name); @@ -1613,16 +1521,14 @@ int __stt_config_mgr_print_engine_info() SLOG(LOG_DEBUG, TAG_STTCONFIG, " agreement : %s", engine_info->agreement); SLOG(LOG_DEBUG, TAG_STTCONFIG, " languages"); - GSList *iter_lang = NULL; - char* lang; if (g_slist_length(engine_info->languages) > 0) { /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); + GSList *iter_lang = g_slist_nth(engine_info->languages, 0); int j = 1; while (NULL != iter_lang) { /*Get handle data from list*/ - lang = iter_lang->data; + char* lang = iter_lang->data; SLOG(LOG_DEBUG, TAG_STTCONFIG, " [%dth] %s", j, lang); @@ -1654,13 +1560,9 @@ static GSList* g_time_list = NULL; int stt_config_mgr_reset_time_info() { /* Remove time info */ - GSList *iter = NULL; - stt_result_time_info_s *data = NULL; - - /* Remove time info */ - iter = g_slist_nth(g_time_list, 0); + GSList *iter = g_slist_nth(g_time_list, 0); while (NULL != iter) { - data = iter->data; + stt_result_time_info_s *data = iter->data; g_time_list = g_slist_remove(g_time_list, data); if (NULL != data) { @@ -1726,12 +1628,11 @@ int stt_config_mgr_foreach_time_info(stt_config_result_time_cb callback, void* u } GSList *iter = NULL; - stt_result_time_info_s *data = NULL; /* Get a first item */ iter = g_slist_nth(temp_time, 0); while (NULL != iter) { - data = iter->data; + stt_result_time_info_s *data = iter->data; if (false == callback(data->index, data->event, data->text, data->start_time, data->end_time, user_data)) { @@ -1745,7 +1646,7 @@ int stt_config_mgr_foreach_time_info(stt_config_result_time_cb callback, void* u /* Remove time info */ iter = g_slist_nth(temp_time, 0); while (NULL != iter) { - data = iter->data; + stt_result_time_info_s *data = iter->data; if (NULL != data) { temp_time = g_slist_remove(temp_time, data); diff --git a/common/stt_engine.c b/common/stt_engine.c index 7365d6e..afcc8f0 100644 --- a/common/stt_engine.c +++ b/common/stt_engine.c @@ -269,11 +269,10 @@ int stt_engine_get_first_language(char** language) } GSList *iter = NULL; - char* data = NULL; iter = g_slist_nth(lang_list, 0); if (NULL != iter) { - data = iter->data; + char* data = iter->data; bool is_valid = false; ret = g_engine->callback->is_valid_lang(data, &is_valid); @@ -290,7 +289,7 @@ int stt_engine_get_first_language(char** language) iter = g_slist_nth(lang_list, 0); while (NULL != iter) { - data = iter->data; + char* data = iter->data; if (NULL != data) { free(data); diff --git a/server/sttd_dbus_server.c b/server/sttd_dbus_server.c index 37ab634..5ce8a9a 100644 --- a/server/sttd_dbus_server.c +++ b/server/sttd_dbus_server.c @@ -197,13 +197,10 @@ int sttd_dbus_server_get_support_engines(DBusConnection* conn, DBusMessage* msg) if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(size))) { ret = STTD_ERROR_OPERATION_FAILED; } else { - GSList *iter = NULL; - engine_s* engine; - - iter = g_slist_nth(engine_list, 0); + GSList *iter = g_slist_nth(engine_list, 0); while (NULL != iter) { - engine = iter->data; + engine_s* engine = iter->data; if (NULL != engine) { if (NULL != engine->engine_id && NULL != engine->engine_name && NULL != engine->ug_name) { @@ -453,13 +450,10 @@ int sttd_dbus_server_get_support_lang(DBusConnection* conn, DBusMessage* msg) SLOG(LOG_ERROR, TAG_STTD, "[OUT ERROR] Fail to append type"); ret = STTD_ERROR_OPERATION_FAILED; } else { - GSList *iter = NULL; - char* temp_lang; - - iter = g_slist_nth(lang_list, 0); + GSList *iter = g_slist_nth(lang_list, 0); while (NULL != iter) { - temp_lang = iter->data; + char* temp_lang = iter->data; dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(temp_lang)); diff --git a/tests/src/stt_unittests.cpp b/tests/src/stt_unittests.cpp index ba29f50..d9d2a92 100644 --- a/tests/src/stt_unittests.cpp +++ b/tests/src/stt_unittests.cpp @@ -83,6 +83,21 @@ static void __stt_speech_status_cb(stt_h stt, stt_speech_status_e status, void * { } +static bool is_feature_enabled() +{ + bool stt_feature = false; + if (SYSTEM_INFO_ERROR_NONE != system_info_get_platform_bool("http://tizen.org/feature/speech.recognition", &stt_feature)) { + return false; + } + + bool mic_feature = false; + if (SYSTEM_INFO_ERROR_NONE != system_info_get_platform_bool("http://tizen.org/feature/microphone", &mic_feature)) { + return false; + } + + return stt_feature && mic_feature; +} + class STTTest : public testing::Test { public: virtual void SetUp() { @@ -92,8 +107,7 @@ class STTTest : public testing::Test { /* start of TC */ int ret = -1; - g_stt_supported = true; - system_info_get_platform_bool("http://tizen.org/feature/speech.recognition", &g_stt_supported); + g_stt_supported = is_feature_enabled(); g_current_state = STT_STATE_CREATED; g_error = STT_ERROR_NONE; @@ -108,6 +122,7 @@ class STTTest : public testing::Test { EXPECT_EQ(ret, STT_ERROR_NONE); } } + virtual void TearDown() { /* end of TC */ int ret = -1; -- 2.7.4