[pulseaudio-discuss] [PATCH] alsa-mixer: Make probing elements with more than two volume channels fail.
Tanu Kaskinen
tanu.kaskinen at digia.com
Wed Mar 23 05:52:48 PDT 2011
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 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index c9adbb0..f20bdba 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -1519,6 +1519,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;
--
1.7.4.1
More information about the pulseaudio-discuss
mailing list