diff --git a/libavfilter/asrc_abuffer.c b/libavfilter/asrc_abuffer.c index badc2d8adf..cfa5f67486 100644 --- a/libavfilter/asrc_abuffer.c +++ b/libavfilter/asrc_abuffer.c @@ -249,10 +249,11 @@ int av_asrc_buffer_add_buffer(AVFilterContext *ctx, pts, flags); } -static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) +static av_cold int init(AVFilterContext *ctx, const char *args0, void *opaque) { ABufferSourceContext *abuffer = ctx->priv; char *arg = NULL, *ptr, chlayout_str[16]; + char *args = av_strdup(args0); int ret; arg = strtok_r(args, ":", &ptr); @@ -260,8 +261,10 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) #define ADD_FORMAT(fmt_name) \ if (!arg) \ goto arg_fail; \ - if ((ret = ff_parse_##fmt_name(&abuffer->fmt_name, arg, ctx)) < 0) \ + if ((ret = ff_parse_##fmt_name(&abuffer->fmt_name, arg, ctx)) < 0) { \ + av_freep(&args); \ return ret; \ + } \ if (*args) \ arg = strtok_r(NULL, ":", &ptr) @@ -281,12 +284,14 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) av_log(ctx, AV_LOG_INFO, "format:%s layout:%s rate:%d\n", av_get_sample_fmt_name(abuffer->sample_format), chlayout_str, abuffer->sample_rate); + av_freep(&args); return 0; arg_fail: av_log(ctx, AV_LOG_ERROR, "Invalid arguments, must be of the form " "sample_rate:sample_fmt:channel_layout:packing\n"); + av_freep(&args); return AVERROR(EINVAL); }