From: aravind.gara Date: Tue, 17 Oct 2017 06:48:15 +0000 (+0900) Subject: Fix Coverity issues X-Git-Tag: submit/tizen_4.0/20171106.073245~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=90e9cf8f931814cc7133ff86c0e013f47e8526eb;p=platform%2Fcore%2Fapi%2Fsound-pool.git Fix Coverity issues [Version] 0.0.9 [Issue Type] Security Change-Id: I7aaa7987291f9263b15d644c96bf515d98205a4a --- diff --git a/packaging/capi-media-sound-pool.spec b/packaging/capi-media-sound-pool.spec index 23e0c85..f382a41 100644 --- a/packaging/capi-media-sound-pool.spec +++ b/packaging/capi-media-sound-pool.spec @@ -1,5 +1,5 @@ Name: capi-media-sound-pool -Version: 0.0.8 +Version: 0.0.9 Summary: Tizen Sound Pool module Release: 0 Group: Multimedia/Framework diff --git a/src/soundpool.c b/src/soundpool.c index bcaf35c..6cb52b2 100644 --- a/src/soundpool.c +++ b/src/soundpool.c @@ -180,7 +180,8 @@ sound_pool_error_e _sound_pool_destroy(sound_pool_t *pool) ALCdevice *device = alcGetContextsDevice(pool->al_context); alcMakeContextCurrent(NULL); alcDestroyContext(pool->al_context); - alcCloseDevice(device); + if (device) + alcCloseDevice(device); } SP_SAFE_GFREE(pool); diff --git a/src/stream_cb_manager.c b/src/stream_cb_manager.c index fa9e1f0..9dfc8a5 100644 --- a/src/stream_cb_manager.c +++ b/src/stream_cb_manager.c @@ -110,6 +110,9 @@ sound_pool_error_e _stream_cb_manager_create(sound_pool_t *pool, stream_cb_manager_t **cbmgr) { SP_DEBUG_FENTER(); + + int err; + sound_pool_error_e ret = SOUND_POOL_ERROR_NONE; SP_RETVM_IF(!pool, SOUND_POOL_ERROR_INVALID_PARAMETER, "Stream callback " "manager can't be created for NULL sound pool"); SP_RETVM_IF(!cbmgr, SOUND_POOL_ERROR_INVALID_PARAMETER, "Can't create " @@ -122,39 +125,66 @@ sound_pool_error_e _stream_cb_manager_create(sound_pool_t *pool, _cbmgr->isolator_callback_queue = g_async_queue_new_full(__queue_destroy_item); - int err = pthread_mutex_init(&_cbmgr->isolator_data_mutex, NULL); - SP_RETVM_IF(err != 0, SOUND_POOL_ERROR_INVALID_PARAMETER, - "Error while initialize mutex for isolation thread with error[%d]", err); + err = pthread_mutex_init(&_cbmgr->isolator_data_mutex, NULL); + + if (0 != err) { + SP_ERROR("Error while initialize mutex for isolation thread with error[%d].", err); + ret = SOUND_POOL_ERROR_OUT_OF_MEMORY; + GOTO_FAIL("", creturn); + } _cbmgr->isolator_state_changed = FALSE; _cbmgr->isolator_loop_run = TRUE; err = pthread_cond_init(&_cbmgr->isolator_data_cond, NULL); - SP_RETVM_IF(err != 0, SOUND_POOL_ERROR_INVALID_PARAMETER, - "Error while initialize condition for isolation thread with error[%d]", err); + + if (0 != err) { + SP_ERROR("Error while initialize condition for isolation thread with error[%d].", err); + ret = SOUND_POOL_ERROR_OUT_OF_MEMORY; + GOTO_FAIL("", creturn); + } err = pthread_create(&_cbmgr->isolator_thread, NULL, &__sound_pool_callback_isolator, (void*)_cbmgr); - SP_RETVM_IF(err != 0, SOUND_POOL_ERROR_OUT_OF_MEMORY, - "Error while thread creating for isolation thread with error[%d]", err); + + if (0 != err) { + SP_ERROR("Error while thread creating for isolation thread with error[%d].", err); + ret = SOUND_POOL_ERROR_OUT_OF_MEMORY; + GOTO_FAIL("", creturn); + } _cbmgr->pool = pool; pool->cbmgr = _cbmgr; *cbmgr = _cbmgr; SP_DEBUG_FLEAVE(); + return SOUND_POOL_ERROR_NONE; + +creturn: + if (_cbmgr->isolator_callback_queue) + g_async_queue_unref(_cbmgr->isolator_callback_queue); + if (&_cbmgr->isolator_data_mutex) + pthread_mutex_destroy(&_cbmgr->isolator_data_mutex); + if (&_cbmgr->isolator_data_cond) + pthread_cond_destroy(&_cbmgr->isolator_data_cond); + SP_SAFE_GFREE(_cbmgr); + + SP_DEBUG_FLEAVE(); + return ret; } sound_pool_error_e _stream_cb_manager_destroy(stream_cb_manager_t *cbmgr) { SP_DEBUG_FENTER(); + void *return_val; + int err; SP_RETVM_IF(!cbmgr, SOUND_POOL_ERROR_INVALID_PARAMETER, "Can't handle callback " "manager, it is NULL."); sound_pool_error_e ret = SOUND_POOL_ERROR_NONE; pthread_t thread = cbmgr->isolator_thread; - int err = pthread_kill(thread, 0); + err = pthread_kill(thread, 0); if (0 == err) { err = pthread_cancel(thread); if (0 != err) { @@ -168,7 +198,6 @@ sound_pool_error_e _stream_cb_manager_destroy(stream_cb_manager_t *cbmgr) GOTO_FAIL("", creturn); } - void *return_val; err = pthread_join(thread, &return_val); if (0 != err) SP_ERROR("Error while joining of isolation thread[%d].", err); diff --git a/test/sound_pool_test.c b/test/sound_pool_test.c index 0295a3a..92a42b7 100644 --- a/test/sound_pool_test.c +++ b/test/sound_pool_test.c @@ -137,8 +137,8 @@ size_t auto_fill(const char *cmd_start, char fill_hint[MAX_COMMAND_LINE_LEN]) for (; idx < CMD_COUNT; ++idx) { if (strncmp(cmd_start, cmd_list[idx], cmd_start_len) == 0) { if (!fill_found) { - strncpy(auto_fill, cmd_list[idx], MAX_COMMAND_LINE_LEN); - fill_found = strnlen(auto_fill, MAX_COMMAND_LINE_LEN); + strncpy(auto_fill, cmd_list[idx], MAX_COMMAND_LINE_LEN - 1); + fill_found = strnlen(auto_fill, MAX_COMMAND_LINE_LEN - 1); } else { fill_found = get_identical_start_len(auto_fill, cmd_list[idx]); auto_fill[fill_found] = '\0'; @@ -147,9 +147,9 @@ size_t auto_fill(const char *cmd_start, char fill_hint[MAX_COMMAND_LINE_LEN]) } if (!fill_found) - strncpy(fill_hint, cmd_start, MAX_COMMAND_LINE_LEN); + strncpy(fill_hint, cmd_start, MAX_COMMAND_LINE_LEN - 1); else - strncpy(fill_hint, auto_fill, MAX_COMMAND_LINE_LEN); + strncpy(fill_hint, auto_fill, MAX_COMMAND_LINE_LEN - 1); return fill_found; } @@ -261,7 +261,7 @@ int main(int argc, char* argv[]) while ((opt = getopt_long(argc, argv, OPTIONS, options, NULL)) != -1) { switch (opt) { case 's': { - snprintf(commands + last_cmd_end, MAX_COMMAND_LINE_LEN, + snprintf(commands + last_cmd_end, MAX_COMMAND_LINE_LEN - 1, "%s %s\n", CMD_EXECUTE_SCRIPT, optarg); last_cmd_end += strnlen(commands + last_cmd_end, MAX_COMMAND_LINE_LEN) + 1;