From 3990c18aacc43301902d63ae87885462069d3bf2 Mon Sep 17 00:00:00 2001 From: Palana Date: Mon, 14 Apr 2014 22:55:14 +0200 Subject: [PATCH] Add NULL checks and assertions to fix clang static analysis problems Also remove an unused variable from obs-encoder.c (via clang static analysis) --- libobs/graphics/graphics.c | 3 +++ libobs/media-io/audio-io.c | 2 ++ libobs/media-io/video-io.c | 2 ++ libobs/obs-encoder.c | 11 +++-------- libobs/obs-scene.c | 4 ++++ libobs/obs.c | 2 ++ libobs/util/config-file.c | 3 +++ libobs/util/threading-posix.c | 3 +++ libobs/util/threading.h | 3 +++ 9 files changed, 25 insertions(+), 8 deletions(-) diff --git a/libobs/graphics/graphics.c b/libobs/graphics/graphics.c index 4fc32dead..5c60d5def 100644 --- a/libobs/graphics/graphics.c +++ b/libobs/graphics/graphics.c @@ -809,13 +809,16 @@ void gs_draw_cube_backdrop(texture_t cubetex, const struct quat *rot, void gs_resetviewport(void) { uint32_t cx, cy; + assert(thread_graphics != NULL); gs_getsize(&cx, &cy); + gs_setviewport(0, 0, (int)cx, (int)cy); } void gs_set2dmode(void) { uint32_t cx, cy; + assert(thread_graphics != NULL); gs_getsize(&cx, &cy); gs_ortho(0.0f, (float)cx, 0.0f, (float)cy, -1.0, -1024.0f); diff --git a/libobs/media-io/audio-io.c b/libobs/media-io/audio-io.c index eb2c209af..d813b2eb6 100644 --- a/libobs/media-io/audio-io.c +++ b/libobs/media-io/audio-io.c @@ -575,6 +575,8 @@ int audio_output_open(audio_t *audio, struct audio_output_info *info) return AUDIO_OUTPUT_INVALIDPARAM; out = bzalloc(sizeof(struct audio_output)); + if (!out) + goto fail; memcpy(&out->info, info, sizeof(struct audio_output_info)); pthread_mutex_init_value(&out->line_mutex); diff --git a/libobs/media-io/video-io.c b/libobs/media-io/video-io.c index 5af5ad359..085e10748 100644 --- a/libobs/media-io/video-io.c +++ b/libobs/media-io/video-io.c @@ -165,6 +165,8 @@ int video_output_open(video_t *video, struct video_output_info *info) return VIDEO_OUTPUT_INVALIDPARAM; out = bzalloc(sizeof(struct video_output)); + if (!out) + goto fail; memcpy(&out->info, info, sizeof(struct video_output_info)); out->frame_time = (uint64_t)(1000000000.0 * (double)info->fps_den / diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index af7935b94..ee4056343 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -366,7 +366,6 @@ void obs_encoder_start(obs_encoder_t encoder, void *param) { struct encoder_callback cb = {false, new_packet, param}; - bool success = true; bool first = false; if (!encoder || !new_packet || !encoder->data) return; @@ -375,13 +374,9 @@ void obs_encoder_start(obs_encoder_t encoder, first = (encoder->callbacks.num == 0); - if (success) { - size_t idx = get_callback_idx(encoder, new_packet, param); - if (idx == DARRAY_INVALID) - da_push_back(encoder->callbacks, &cb); - else - success = false; - } + size_t idx = get_callback_idx(encoder, new_packet, param); + if (idx == DARRAY_INVALID) + da_push_back(encoder->callbacks, &cb); pthread_mutex_unlock(&encoder->callbacks_mutex); diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index fbe31870e..fe7c8e146 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -130,6 +130,8 @@ static inline void attach_sceneitem(struct obs_scene_item *item, prev->next->prev = item; prev->next = item; } else { + assert(item->parent != NULL); + item->next = item->parent->first_item; item->parent->first_item = item; } @@ -406,6 +408,8 @@ void obs_sceneitem_remove(obs_sceneitem_t item) item->removed = true; + assert(scene != NULL); + assert(scene->source != NULL); obs_source_remove_child(scene->source, item->source); signal_item_remove(item); diff --git a/libobs/obs.c b/libobs/obs.c index 466b6e67c..194eaa309 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -387,6 +387,8 @@ static bool obs_init_data(void) struct obs_core_data *data = &obs->data; pthread_mutexattr_t attr; + assert(data != NULL); + pthread_mutex_init_value(&obs->data.displays_mutex); if (pthread_mutexattr_init(&attr) != 0) diff --git a/libobs/util/config-file.c b/libobs/util/config-file.c index be9e77279..7466caa31 100644 --- a/libobs/util/config-file.c +++ b/libobs/util/config-file.c @@ -234,6 +234,9 @@ int config_open(config_t *config, const char *file, return CONFIG_ERROR; *config = bzalloc(sizeof(struct config_data)); + if (!*config) + return CONFIG_ERROR; + (*config)->file = bstrdup(file); errorcode = config_parse(&(*config)->sections, file, always_open); diff --git a/libobs/util/threading-posix.c b/libobs/util/threading-posix.c index cbbc56922..a86f1ac71 100644 --- a/libobs/util/threading-posix.c +++ b/libobs/util/threading-posix.c @@ -171,6 +171,9 @@ int os_sem_init(os_sem_t *sem, int value) return -1; *sem = bzalloc(sizeof(struct os_sem_data)); + if (!*sem) + return -2; + (*sem)->sem = new_sem; (*sem)->task = task; return 0; diff --git a/libobs/util/threading.h b/libobs/util/threading.h index e525cf82f..d48306b0c 100644 --- a/libobs/util/threading.h +++ b/libobs/util/threading.h @@ -40,6 +40,9 @@ extern "C" { /* this may seem strange, but you can't use it unless it's an initializer */ static inline void pthread_mutex_init_value(pthread_mutex_t *mutex) { + if (!mutex) + return; + pthread_mutex_t init_val = PTHREAD_MUTEX_INITIALIZER; *mutex = init_val; }