diff options
| author | Tanu Kaskinen <tanu.kaskinen@digia.com> | 2011-03-23 12:03:43 +0200 | 
|---|---|---|
| committer | Colin Guthrie <colin@mageia.org> | 2011-03-30 09:21:58 +0100 | 
| commit | 44623a347de67100e9d1059b682f0dcfb89bd273 (patch) | |
| tree | 1cfe3ee9fb7db322a312addcf381657418f38730 /src | |
| parent | 527078523815587bfd021bc1d10782403e9b3e84 (diff) | |
alsa-mixer: Make sure that SND_MIXER_SCHN_UNKNOWN isn't used when indexing e->masks.
SND_MIXER_SCHN_UNKNOWN is defined as -1, so that's not a good array index...
Diffstat (limited to 'src')
| -rw-r--r-- | src/modules/alsa/alsa-mixer.c | 13 | 
1 files changed, 11 insertions, 2 deletions
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c index eb8b9433..b1340681 100644 --- a/src/modules/alsa/alsa-mixer.c +++ b/src/modules/alsa/alsa-mixer.c @@ -1453,8 +1453,13 @@ static int element_probe(pa_alsa_element *e, snd_mixer_t *m) {                      e->n_channels = 1;                      if (!e->override_map) { -                        for (p = PA_CHANNEL_POSITION_FRONT_LEFT; p < PA_CHANNEL_POSITION_MAX; p++) +                        for (p = PA_CHANNEL_POSITION_FRONT_LEFT; p < PA_CHANNEL_POSITION_MAX; p++) { +                            if (alsa_channel_ids[p] == SND_MIXER_SCHN_UNKNOWN) +                                continue; +                              e->masks[alsa_channel_ids[p]][e->n_channels-1] = 0; +                        } +                          e->masks[SND_MIXER_SCHN_MONO][e->n_channels-1] = PA_CHANNEL_POSITION_MASK_ALL;                      } @@ -1510,8 +1515,12 @@ static int element_probe(pa_alsa_element *e, snd_mixer_t *m) {                      }                      e->merged_mask = 0; -                    for (p = PA_CHANNEL_POSITION_FRONT_LEFT; p < PA_CHANNEL_POSITION_MAX; p++) +                    for (p = PA_CHANNEL_POSITION_FRONT_LEFT; p < PA_CHANNEL_POSITION_MAX; p++) { +                        if (alsa_channel_ids[p] == SND_MIXER_SCHN_UNKNOWN) +                            continue; +                          e->merged_mask |= e->masks[alsa_channel_ids[p]][e->n_channels-1]; +                    }                  }              }          }  | 
