Fix Coverity issues 96/156096/3
authoraravind.gara <aravind.gara@samsung.com>
Tue, 17 Oct 2017 06:48:15 +0000 (15:48 +0900)
committeraravind.gara <aravind.gara@samsung.com>
Thu, 19 Oct 2017 08:13:34 +0000 (17:13 +0900)
[Version] 0.0.9
[Issue Type] Security

Change-Id: I2593306fb8dac8438aa0fbd8a354ba6367262b2d
Signed-off-by: aravind.gara <aravind.gara@samsung.com>
packaging/capi-media-sound-pool.spec
src/soundpool.c
src/stream_cb_manager.c
test/sound_pool_test.c

index 23e0c85743399d9545fa73126def946ed3e93d9c..f382a4127ce1a5526893f040a145664f82537816 100644 (file)
@@ -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
index bcaf35c5e3d2e07476e2b6da0931bae8d4664d30..6cb52b2df4fd04fd589fb71d626c6801c83bfe86 100644 (file)
@@ -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);
index fa9e1f0278295835a57f8855edd7025efbabd673..9dfc8a52d87c45d19778caba9fa61934ce850e82 100644 (file)
@@ -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);
index 0295a3a3321881c3b438ef7143bf0a7a000be1a4..92a42b7ac45eeb47698a8500a9d408641be847eb 100644 (file)
@@ -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;