summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorDavid Henningsson <david.henningsson@canonical.com>2011-08-04 11:13:37 +0200
committerColin Guthrie <colin@mageia.org>2011-08-04 17:23:37 +0100
commit5bfcb5d8a09bf5c726d4aea6fb04533007c24143 (patch)
tree2aa02bd91c8fd651447c90514177e3afcace73ed /src/modules
parent85291b1954303d577209dbb99c6950995aac7b01 (diff)
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 <david.henningsson@canonical.com>
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/alsa/alsa-mixer.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index f6a2a203..4542ac33 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;
}