summaryrefslogtreecommitdiff
path: root/libavfilter/af_channelmap.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-04-17 15:04:16 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-04-17 15:04:22 +0200
commit74e86d3147cc0c0af89b5c512fe94e19873a35a1 (patch)
treea1bd702a40e4763a4c2ae78c4c82ce65df6c781d /libavfilter/af_channelmap.c
parentb725202546da366772dec1ada40ce36832582ed9 (diff)
parentaafed1175df76603e94c99a7748968780d6548d2 (diff)
downloadffmpeg-74e86d3147cc0c0af89b5c512fe94e19873a35a1.tar.gz
Merge commit 'aafed1175df76603e94c99a7748968780d6548d2'
* commit 'aafed1175df76603e94c99a7748968780d6548d2': af_channelmap: sanity check input channel indices in all cases. Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/af_channelmap.c')
-rw-r--r--libavfilter/af_channelmap.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/libavfilter/af_channelmap.c b/libavfilter/af_channelmap.c
index a4088640a3..2db554eed9 100644
--- a/libavfilter/af_channelmap.c
+++ b/libavfilter/af_channelmap.c
@@ -357,23 +357,32 @@ static int channelmap_config_input(AVFilterLink *inlink)
{
AVFilterContext *ctx = inlink->dst;
ChannelMapContext *s = ctx->priv;
+ int nb_channels = av_get_channel_layout_nb_channels(inlink->channel_layout);
int i, err = 0;
const char *channel_name;
char layout_name[256];
- if (s->mode == MAP_PAIR_STR_INT || s->mode == MAP_PAIR_STR_STR) {
- for (i = 0; i < s->nch; i++) {
+ for (i = 0; i < s->nch; i++) {
+ if (s->mode == MAP_PAIR_STR_INT || s->mode == MAP_PAIR_STR_STR) {
s->map[i].in_channel_idx = av_get_channel_layout_channel_index(
inlink->channel_layout, s->map[i].in_channel);
- if (s->map[i].in_channel_idx < 0) {
+ }
+
+ if (s->map[i].in_channel_idx < 0 ||
+ s->map[i].in_channel_idx >= nb_channels) {
+ av_get_channel_layout_string(layout_name, sizeof(layout_name),
+ 0, inlink->channel_layout);
+ if (s->map[i].in_channel) {
channel_name = av_get_channel_name(s->map[i].in_channel);
- av_get_channel_layout_string(layout_name, sizeof(layout_name),
- 0, inlink->channel_layout);
av_log(ctx, AV_LOG_ERROR,
"input channel '%s' not available from input layout '%s'\n",
channel_name, layout_name);
- err = AVERROR(EINVAL);
+ } else {
+ av_log(ctx, AV_LOG_ERROR,
+ "input channel #%d not available from input layout '%s'\n",
+ s->map[i].in_channel_idx, layout_name);
}
+ err = AVERROR(EINVAL);
}
}