]> code.delx.au - pulseaudio/commitdiff
alsa-mixer: Make probing elements with more than two volume channels fail.
authorTanu Kaskinen <tanu.kaskinen@digia.com>
Wed, 23 Mar 2011 12:52:48 +0000 (14:52 +0200)
committerColin Guthrie <colin@mageia.org>
Wed, 30 Mar 2011 08:20:56 +0000 (09:20 +0100)
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

index 3b13879d0b38fe49a93832573172724aa00aaa11..eb8b943358203ec7ccaa0f613e5f48536fe08b0a 100644 (file)
@@ -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;