aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-08-07 05:54:34 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2021-02-27 07:20:57 +0100
commit4a95c96eb76b7580e7e3b2440c33afc4cfdf4c97 (patch)
tree4bd1bab895cab3dc58222b76497ef0b199023ecf
parent5bc83dd89d1fa5e165f2d98ffaf403a45a2a98a3 (diff)
downloadffmpeg-4a95c96eb76b7580e7e3b2440c33afc4cfdf4c97.tar.gz
avfilter/vf_vpp_qsv: Fix leak of AVFilterFormats on error
The vpp_qsv's query_formats function allocated two AVFilterFormats, before storing them permanently. If storing the first of them fails, the function simply returns and the second leaks. This has been fixed by only allocating the second AVFilterFormats structure after the first one has been successfully stored. Fixes Coverity issue #1422231. Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> (cherry picked from commit c4beb0783bd2470edbcc8da9e264c7fe1c10d7cc)
-rw-r--r--libavfilter/vf_vpp_qsv.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c
index 3194295f5f..12023af2d7 100644
--- a/libavfilter/vf_vpp_qsv.c
+++ b/libavfilter/vf_vpp_qsv.c
@@ -489,7 +489,6 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *picref)
static int query_formats(AVFilterContext *ctx)
{
int ret;
- AVFilterFormats *in_fmts, *out_fmts;
static const enum AVPixelFormat in_pix_fmts[] = {
AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NV12,
@@ -505,16 +504,12 @@ static int query_formats(AVFilterContext *ctx)
AV_PIX_FMT_NONE
};
- in_fmts = ff_make_format_list(in_pix_fmts);
- out_fmts = ff_make_format_list(out_pix_fmts);
- ret = ff_formats_ref(in_fmts, &ctx->inputs[0]->out_formats);
+ ret = ff_formats_ref(ff_make_format_list(in_pix_fmts),
+ &ctx->inputs[0]->out_formats);
if (ret < 0)
return ret;
- ret = ff_formats_ref(out_fmts, &ctx->outputs[0]->in_formats);
- if (ret < 0)
- return ret;
-
- return 0;
+ return ff_formats_ref(ff_make_format_list(out_pix_fmts),
+ &ctx->outputs[0]->in_formats);
}
static av_cold void vpp_uninit(AVFilterContext *ctx)