From 5bfcb5d8a09bf5c726d4aea6fb04533007c24143 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Thu, 4 Aug 2011 11:13:37 +0200 Subject: [PATCH] Fix crash in path subset elimination As reported in http://kpaste.net/04f1f3f it is possible to call enumeration_is_subset with null pointers. Handle that case instead of crashing. (It is also possible that Tanuk's pending element_is_subset patch solves the issue, but this nevertheless gives some extra security.) Signed-off-by: David Henningsson --- src/modules/alsa/alsa-mixer.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c index f6a2a20..4542ac3 100644 --- a/src/modules/alsa/alsa-mixer.c +++ b/src/modules/alsa/alsa-mixer.c @@ -2890,8 +2890,8 @@ static pa_bool_t options_have_option(pa_alsa_option *options, const char *alsa_n static pa_bool_t enumeration_is_subset(pa_alsa_option *a_options, pa_alsa_option *b_options) { pa_alsa_option *oa, *ob; - pa_assert(a_options); - pa_assert(b_options); + if (!a_options) return TRUE; + if (!b_options) return FALSE; /* If there is an option A offers that B does not, then A is not a subset of B. */ PA_LLIST_FOREACH(oa, a_options) { @@ -3005,6 +3005,8 @@ static pa_bool_t element_is_subset(pa_alsa_element *a, pa_alsa_element *b, snd_m } if (a->enumeration_use != PA_ALSA_ENUMERATION_IGNORE) { + if (b->enumeration_use == PA_ALSA_ENUMERATION_IGNORE) + return FALSE; if (!enumeration_is_subset(a->options, b->options)) return FALSE; } -- 2.7.4