summaryrefslogtreecommitdiff
path: root/fftools/ffmpeg_opt.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2023-07-22 20:55:10 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2023-07-23 17:55:38 +0200
commit8bb1bcf47d532c6f67dbc444bb7893f6f94f4c8a (patch)
treec47128843a8ab21b7773d9542eabbb2eebe22976 /fftools/ffmpeg_opt.c
parent0368ded1a9fab23077cfc50f8878a0193dfd0510 (diff)
fftools/ffmpeg_opt: Fix leak on error
Fixes Coverity id #1539096. Reviewed-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'fftools/ffmpeg_opt.c')
-rw-r--r--fftools/ffmpeg_opt.c21
1 files 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)