From 10f5d7f3aa4669df2b87816b27fb14c8a6ea17b1 Mon Sep 17 00:00:00 2001 From: GoaLitiuM <goalitium@kapsi.fi> Date: Sat, 27 Sep 2014 01:35:36 +0300 Subject: [PATCH] Fixed NULL pointer dereferencing in linked lists --- libobs-opengl/gl-shader.c | 3 ++- libobs/media-io/audio-io.c | 3 ++- libobs/obs-display.c | 3 ++- libobs/obs.c | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libobs-opengl/gl-shader.c b/libobs-opengl/gl-shader.c index b3c03e166..931a95ede 100644 --- a/libobs-opengl/gl-shader.c +++ b/libobs-opengl/gl-shader.c @@ -673,7 +673,8 @@ void gs_program_destroy(struct gs_program *program) if (program->next) program->next->prev_next = program->prev_next; - *program->prev_next = program->next; + if (program->prev_next) + *program->prev_next = program->next; glDeleteProgram(program->obj); gl_success("glDeleteProgram"); diff --git a/libobs/media-io/audio-io.c b/libobs/media-io/audio-io.c index 806a33156..3829f81c9 100644 --- a/libobs/media-io/audio-io.c +++ b/libobs/media-io/audio-io.c @@ -99,7 +99,8 @@ static inline void audio_output_removeline(struct audio_output *audio, struct audio_line *line) { pthread_mutex_lock(&audio->line_mutex); - *line->prev_next = line->next; + if (line->prev_next) + *line->prev_next = line->next; if (line->next) line->next->prev_next = line->prev_next; pthread_mutex_unlock(&audio->line_mutex); diff --git a/libobs/obs-display.c b/libobs/obs-display.c index a20b55249..f433d8620 100644 --- a/libobs/obs-display.c +++ b/libobs/obs-display.c @@ -86,7 +86,8 @@ void obs_display_destroy(obs_display_t *display) { if (display) { pthread_mutex_lock(&obs->data.displays_mutex); - *display->prev_next = display->next; + if (display->prev_next) + *display->prev_next = display->next; if (display->next) display->next->prev_next = display->prev_next; pthread_mutex_unlock(&obs->data.displays_mutex); diff --git a/libobs/obs.c b/libobs/obs.c index e06ff457f..fc5904467 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1326,7 +1326,8 @@ void obs_context_data_remove(struct obs_context_data *context) { if (context && context->mutex) { pthread_mutex_lock(context->mutex); - *context->prev_next = context->next; + if (context->prev_next) + *context->prev_next = context->next; if (context->next) context->next->prev_next = context->prev_next; pthread_mutex_unlock(context->mutex); -- GitLab