[FFmpeg-devel] [PATCH] avutil/frame: Assert that width/height/channels is 0 for the destination of av_frame*_ref()

Clément Bœsch u at pkh.me
Wed Mar 9 10:27:50 CET 2016


On Tue, Mar 08, 2016 at 09:14:58PM +0100, Michael Niedermayer wrote:
> This should detect caes where these functions are called in unclean destinations
> ---
>  libavutil/frame.c |    6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/libavutil/frame.c b/libavutil/frame.c
> index 5607206..dde32b0 100644
> --- a/libavutil/frame.c
> +++ b/libavutil/frame.c
> @@ -375,6 +375,9 @@ int av_frame_ref(AVFrame *dst, const AVFrame *src)
>  {
>      int i, ret = 0;
>  
> +    av_assert0(dst->width == 0 && dst->height == 0);
> +    av_assert0(dst->channels == 0);
> +
>      dst->format         = src->format;
>      dst->width          = src->width;
>      dst->height         = src->height;
> @@ -504,6 +507,9 @@ void av_frame_unref(AVFrame *frame)
>  
>  void av_frame_move_ref(AVFrame *dst, AVFrame *src)
>  {
> +    av_assert0(dst->width == 0 && dst->height == 0);
> +    av_assert0(dst->channels == 0);
> +
>      *dst = *src;
>      if (src->extended_data == src->data)
>          dst->extended_data = dst->data;

That's a good idea but downstream developers might prefer their users to
experience a memleak that random violent aborts. I would probably make it
at assert level 1.

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160309/fe839ce9/attachment.sig>


More information about the ffmpeg-devel mailing list