summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/polyp/channelmap.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/polyp/channelmap.c b/src/polyp/channelmap.c
index 8d642a06..38349bfa 100644
--- a/src/polyp/channelmap.c
+++ b/src/polyp/channelmap.c
@@ -277,10 +277,19 @@ int pa_channel_map_valid(const pa_channel_map *map) {
if (map->channels <= 0 || map->channels > PA_CHANNELS_MAX)
return 0;
- for (c = 0; c < map->channels; c++)
+ for (c = 0; c < map->channels; c++) {
+ unsigned k;
+
if (map->map[c] < 0 ||map->map[c] >= PA_CHANNEL_POSITION_MAX)
return 0;
+ /* Don't allow positions to be specified twice */
+ for (k = 0; k < c; k++)
+ if (map->map[k] == map->map[c])
+ return 0;
+
+ }
+
return 1;
}