avcodec/options: do a more thorough clean up in avcodec_copy_context()
Free coded_frame, coded_side_data and unref hw_device_ctx 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>
This commit is contained in:
		
							parent
							
								
									54a4c9b4e9
								
							
						
					
					
						commit
						cac8de2da5
					
				@ -190,14 +190,26 @@ 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);
 | 
			
		||||
    av_buffer_unref(&avctx->hw_device_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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -238,11 +250,14 @@ 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->hw_device_ctx   = NULL;
 | 
			
		||||
    dest->nb_coded_side_data = 0;
 | 
			
		||||
 | 
			
		||||
#define alloc_and_copy_or_fail(obj, size, pad) \
 | 
			
		||||
    if (src->obj && size > 0) { \
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user