From 8bb1bcf47d532c6f67dbc444bb7893f6f94f4c8a Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Sat, 22 Jul 2023 20:55:10 +0200 Subject: [PATCH] fftools/ffmpeg_opt: Fix leak on error Fixes Coverity id #1539096. Reviewed-by: Anton Khirnov Signed-off-by: Andreas Rheinhardt --- fftools/ffmpeg_opt.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index f7606ae6f6..1860e9d329 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -401,13 +401,14 @@ static int opt_map(void *optctx, const char *opt, const char *arg) ret = GROW_ARRAY(o->stream_maps, o->nb_stream_maps); if (ret < 0) - return ret; + goto fail; m = &o->stream_maps[o->nb_stream_maps - 1]; m->linklabel = av_get_token(&c, "]"); if (!m->linklabel) { av_log(NULL, AV_LOG_ERROR, "Invalid output link label: %s.\n", map); - return AVERROR(EINVAL); + ret = AVERROR(EINVAL); + goto fail; } } else { if (allow_unused = strchr(map, '?')) @@ -415,7 +416,8 @@ static int opt_map(void *optctx, const char *opt, const char *arg) file_idx = strtol(map, &p, 0); if (file_idx >= nb_input_files || file_idx < 0) { av_log(NULL, AV_LOG_FATAL, "Invalid input file index: %d.\n", file_idx); - return AVERROR(EINVAL); + ret = AVERROR(EINVAL); + goto fail; } if (negative) /* disable some already defined maps */ @@ -438,7 +440,7 @@ static int opt_map(void *optctx, const char *opt, const char *arg) } ret = GROW_ARRAY(o->stream_maps, o->nb_stream_maps); if (ret < 0) - return ret; + goto fail; m = &o->stream_maps[o->nb_stream_maps - 1]; @@ -453,16 +455,19 @@ static int opt_map(void *optctx, const char *opt, const char *arg) } else if (disabled) { av_log(NULL, AV_LOG_FATAL, "Stream map '%s' matches disabled streams.\n" "To ignore this, add a trailing '?' to the map.\n", arg); - return AVERROR(EINVAL); + ret = AVERROR(EINVAL); + goto fail; } else { av_log(NULL, AV_LOG_FATAL, "Stream map '%s' matches no streams.\n" "To ignore this, add a trailing '?' to the map.\n", arg); - return AVERROR(EINVAL); + ret = AVERROR(EINVAL); + goto fail; } } - + ret = 0; +fail: av_freep(&map); - return 0; + return ret; } static int opt_attach(void *optctx, const char *opt, const char *arg)