From 527078523815587bfd021bc1d10782403e9b3e84 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Wed, 23 Mar 2011 14:52:48 +0200 Subject: alsa-mixer: Make probing elements with more than two volume channels fail. This is just a quick hack to prevent array overflow. Correct fix would be to implement support for more channels. --- src/modules/alsa/alsa-mixer.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/modules') diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c index 3b13879d..eb8b9433 100644 --- a/src/modules/alsa/alsa-mixer.c +++ b/src/modules/alsa/alsa-mixer.c @@ -1477,6 +1477,22 @@ static int element_probe(pa_alsa_element *e, snd_mixer_t *m) { return -1; } + if (e->n_channels > 2) { + /* FIXME: In some places code like this is used: + * + * e->masks[alsa_channel_ids[p]][e->n_channels-1] + * + * The definition of e->masks is + * + * pa_channel_position_mask_t masks[SND_MIXER_SCHN_LAST][2]; + * + * Since the array size is fixed at 2, we obviously + * don't support elements with more than two + * channels... */ + pa_log_warn("Volume element %s has %u channels. That's too much! I can't handle that!", e->alsa_name, e->n_channels); + return -1; + } + if (!e->override_map) { for (p = PA_CHANNEL_POSITION_FRONT_LEFT; p < PA_CHANNEL_POSITION_MAX; p++) { pa_bool_t has_channel; -- cgit