diff options
author | James Almer <jamrial@gmail.com> | 2017-04-24 14:53:47 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2017-05-16 11:31:15 -0300 |
commit | 1564125e4eb1a1a78d46f30c6638b42f599cc8a5 (patch) | |
tree | fc59e6c2c62dfd1770f1ba57abd1f796fdb36a5a | |
parent | d2c6bcdbf181daaea1f28d5f7bbe54e20fc46db6 (diff) | |
download | ffmpeg-1564125e4eb1a1a78d46f30c6638b42f599cc8a5.tar.gz |
avcodec/options: do a more thorough clean up in avcodec_copy_context()
Free coded_frame and coded_side_data to prevent potential leaks.
Reviewed-by: Aaron Levinson <alevinsn@aracnet.com>
Tested-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: James Almer <jamrial@gmail.com>
(cherry picked from commit cac8de2da5c4935773128335c11b806faa73e19d)
-rw-r--r-- | libavcodec/options.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/libavcodec/options.c b/libavcodec/options.c index 116d1ce4a6..e124fb442e 100644 --- a/libavcodec/options.c +++ b/libavcodec/options.c @@ -189,14 +189,25 @@ void avcodec_free_context(AVCodecContext **pavctx) #if FF_API_COPY_CONTEXT static void copy_context_reset(AVCodecContext *avctx) { + int i; + av_opt_free(avctx); +#if FF_API_CODED_FRAME +FF_DISABLE_DEPRECATION_WARNINGS + av_frame_free(&avctx->coded_frame); +FF_ENABLE_DEPRECATION_WARNINGS +#endif av_freep(&avctx->rc_override); av_freep(&avctx->intra_matrix); av_freep(&avctx->inter_matrix); av_freep(&avctx->extradata); av_freep(&avctx->subtitle_header); av_buffer_unref(&avctx->hw_frames_ctx); + for (i = 0; i < avctx->nb_coded_side_data; i++) + av_freep(&avctx->coded_side_data[i].data); + av_freep(&avctx->coded_side_data); avctx->subtitle_header_size = 0; + avctx->nb_coded_side_data = 0; avctx->extradata_size = 0; } @@ -237,11 +248,13 @@ FF_ENABLE_DEPRECATION_WARNINGS /* reallocate values that should be allocated separately */ dest->extradata = NULL; + dest->coded_side_data = NULL; dest->intra_matrix = NULL; dest->inter_matrix = NULL; dest->rc_override = NULL; dest->subtitle_header = NULL; dest->hw_frames_ctx = NULL; + dest->nb_coded_side_data = 0; #define alloc_and_copy_or_fail(obj, size, pad) \ if (src->obj && size > 0) { \ |