aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas Haas <git@haasn.dev>2024-07-09 16:41:01 +0200
committerNiklas Haas <git@haasn.dev>2024-07-14 13:48:59 +0200
commit4ec45aca36ff6c7c7767536ce7f4a855f8b37fb0 (patch)
tree92bdd530bb96c037ae6aea85b0828c79e22b66ce
parent36aee69f0d2ac2255c9a47d46bc8a26c196a40c2 (diff)
downloadffmpeg-4ec45aca36ff6c7c7767536ce7f4a855f8b37fb0.tar.gz
swscale/utils: fix leak on threaded ctx init failure
This count gets incremented after init succeeds, when it should be incremented after *alloc* succeeds. Otherwise, we leak the context on failure. There are no negative consequences of incrementing for allocated-but-not-initialized contexts, as the only functions that reference it will, in the worst case, simply behave as if called on allocated-but-not-initialized contexts, which is in line with expected behavior when sws_init_context() fails.
-rw-r--r--libswscale/utils.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/libswscale/utils.c b/libswscale/utils.c
index bc8d7627e2..c3154d82c1 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -2042,6 +2042,7 @@ static int context_init_threaded(SwsContext *c,
if (!c->slice_ctx[i])
return AVERROR(ENOMEM);
+ c->nb_slice_ctx++;
c->slice_ctx[i]->parent = c;
ret = av_opt_copy((void*)c->slice_ctx[i], (void*)c);
@@ -2054,8 +2055,6 @@ static int context_init_threaded(SwsContext *c,
if (ret < 0)
return ret;
- c->nb_slice_ctx++;
-
if (c->slice_ctx[i]->dither == SWS_DITHER_ED) {
av_log(c, AV_LOG_VERBOSE,
"Error-diffusion dither is in use, scaling will be single-threaded.");