Fix static analysis issue 31/291631/1
authorSuyeon Hwang <stom.hwang@samsung.com>
Wed, 19 Apr 2023 11:16:11 +0000 (20:16 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Wed, 19 Apr 2023 11:16:11 +0000 (20:16 +0900)
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 <stom.hwang@samsung.com>
common/stt_config_mgr.c
common/stt_engine.c
server/sttd_dbus_server.c
tests/src/stt_unittests.cpp

index 3f3555b..91fc8b3 100644 (file)
@@ -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);
index 7365d6e..afcc8f0 100644 (file)
@@ -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);
index 37ab634..5ce8a9a 100644 (file)
@@ -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));
 
index ba29f50..d9d2a92 100644 (file)
@@ -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;