On 2012-10-09 22:15:44 +0200, Janne Grunau wrote:
> Fixes CID700635, CID700636 and CID732274.
> ---
>  libavfilter/graphparser.c | 24 +++++++++++++++---------
>  1 file changed, 15 insertions(+), 9 deletions(-)
> 
> diff --git a/libavfilter/graphparser.c b/libavfilter/graphparser.c
> index 3921189..04339c8 100644
> --- a/libavfilter/graphparser.c
> +++ b/libavfilter/graphparser.c
> @@ -238,10 +238,11 @@ static int link_filter_inouts(AVFilterContext *filt_ctx,
>              return AVERROR(ENOMEM);
>  
>          if (p->filter_ctx) {
> -            if ((ret = link_filter(p->filter_ctx, p->pad_idx, filt_ctx, pad, 
> log_ctx)) < 0)
> -                return ret;
> +            ret = link_filter(p->filter_ctx, p->pad_idx, filt_ctx, pad, 
> log_ctx);
>              av_free(p->name);
>              av_free(p);
> +            if (ret < 0)
> +                return ret;
>          } else {
>              p->filter_ctx = filt_ctx;
>              p->pad_idx = pad;
> @@ -289,8 +290,10 @@ static int parse_inputs(const char **buf, AVFilterInOut 
> **curr_inputs,
>              av_free(name);
>          } else {
>              /* Not in the list, so add it as an input */
> -            if (!(match = av_mallocz(sizeof(AVFilterInOut))))
> +            if (!(match = av_mallocz(sizeof(AVFilterInOut)))) {
> +                av_free(name);
>                  return AVERROR(ENOMEM);
> +            }
>              match->name    = name;
>              match->pad_idx = pad;
>          }
> @@ -318,24 +321,27 @@ static int parse_outputs(const char **buf, 
> AVFilterInOut **curr_inputs,
>          AVFilterInOut *match;
>  
>          AVFilterInOut *input = *curr_inputs;
> +
> +        if (!name)
> +            return AVERROR(EINVAL);
> +
>          if (!input) {
>              av_log(log_ctx, AV_LOG_ERROR,
> -                   "No output pad can be associated to link label '%s'.\n",
> -                   name);
> +                   "No output pad can be associated to link label '%s'.\n", 
> name);
> +            av_free(name);
>              return AVERROR(EINVAL);
>          }
>          *curr_inputs = (*curr_inputs)->next;
>  
> -        if (!name)
> -            return AVERROR(EINVAL);
> -
>          /* First check if the label is not in the open_inputs list */
>          match = extract_inout(name, open_inputs);
>  
>          if (match) {
>              if ((ret = link_filter(input->filter_ctx, input->pad_idx,
> -                                   match->filter_ctx, match->pad_idx, 
> log_ctx)) < 0)
> +                                   match->filter_ctx, match->pad_idx, 
> log_ctx)) < 0) {
> +                av_free(name);
>                  return ret;
> +            }
>              av_free(match->name);
>              av_free(name);
>              av_free(match);

ping

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

Reply via email to