aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-05-06 01:47:57 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-01-11 22:37:58 +0100
commit2de8235791dbc10087573d40eb81e1653993b2ab (patch)
tree768f1d57d6585024579c32a6f2aff2c7c691ed53 /libavcodec
parent44f830e7f0182c20b36ac44ccaa10bb23c8caaff (diff)
downloadffmpeg-2de8235791dbc10087573d40eb81e1653993b2ab.tar.gz
avcodec/dnxhdenc: Fix segfault when using too many slice threads
The DNXHD encoder's context contains an array of 32 pointers to DNXHDEncContexts used in case of slice threading; when trying to use more than 32 threads with slice threading, the encoder's init function errors out, but the close function takes avctx->thread_count at face value and tries to free inexistent elements of the array, leading to potential crashes. Fix this by modifying the check used to decide whether the slice contexts should be freed. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> (cherry picked from commit eb583b3cb98797e8e815b7432f90cae8e8d52794)
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/dnxhdenc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c
index 2461c51727..31ae147433 100644
--- a/libavcodec/dnxhdenc.c
+++ b/libavcodec/dnxhdenc.c
@@ -1353,7 +1353,7 @@ static av_cold int dnxhd_encode_end(AVCodecContext *avctx)
av_freep(&ctx->qmatrix_c16);
av_freep(&ctx->qmatrix_l16);
- if (avctx->active_thread_type == FF_THREAD_SLICE) {
+ if (ctx->thread[1]) {
for (i = 1; i < avctx->thread_count; i++)
av_freep(&ctx->thread[i]);
}