On 22/07/15 11:34, Anton Khirnov wrote:
> The current code expects query_formats() to be called exactly once, it
> will leak if it's not called at all (filter initialized, but never
> configured or used) or try to read freed memory if it's called more than
> once.
> 
> Found-by: James Almer <[email protected]>
> CC: [email protected]
> ---
>  libavfilter/af_channelmap.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/libavfilter/af_channelmap.c b/libavfilter/af_channelmap.c
> index 3035405..5725498 100644
> --- a/libavfilter/af_channelmap.c
> +++ b/libavfilter/af_channelmap.c
> @@ -57,7 +57,6 @@ enum MappingMode {
>  #define MAX_CH 64
>  typedef struct ChannelMapContext {
>      const AVClass *class;
> -    AVFilterChannelLayouts *channel_layouts;
>      char *mapping_str;
>      char *channel_layout_str;
>      uint64_t output_layout;
> @@ -276,8 +275,6 @@ static av_cold int channelmap_init(AVFilterContext *ctx)
>          return AVERROR(EINVAL);
>      }
>  
> -    ff_add_channel_layout(&s->channel_layouts, s->output_layout);
> -
>      if (mode == MAP_PAIR_INT_STR || mode == MAP_PAIR_STR_STR) {
>          for (i = 0; i < s->nch; i++) {
>              s->map[i].out_channel_idx = av_get_channel_layout_channel_index(
> @@ -291,11 +288,14 @@ static av_cold int channelmap_init(AVFilterContext *ctx)
>  static int channelmap_query_formats(AVFilterContext *ctx)
>  {
>      ChannelMapContext *s = ctx->priv;
> +    AVFilterChannelLayouts *channel_layouts = NULL;
> +
> +    ff_add_channel_layout(&channel_layouts, s->output_layout);
>  
>      ff_set_common_formats(ctx, ff_planar_sample_fmts());
>      ff_set_common_samplerates(ctx, ff_all_samplerates());
>      ff_channel_layouts_ref(ff_all_channel_layouts(), 
> &ctx->inputs[0]->out_channel_layouts);
> -    ff_channel_layouts_ref(s->channel_layouts,       
> &ctx->outputs[0]->in_channel_layouts);
> +    ff_channel_layouts_ref(channel_layouts,          
> &ctx->outputs[0]->in_channel_layouts);
>  
>      return 0;
>  }
> 

Ok.
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to