[FFmpeg-devel] [PATCH 08/14] decode: plug leaks on error in update_frame_pool()

Anton Khirnov anton at khirnov.net
Tue Apr 7 16:43:38 EEST 2020


Quoting James Almer (2020-03-27 16:03:46)
> On 3/27/2020 9:57 AM, Anton Khirnov wrote:
> > ---
> >  libavcodec/decode.c | 8 +++++---
> >  1 file changed, 5 insertions(+), 3 deletions(-)
> > 
> > diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> > index 8925ce6edc..f43dc0dd5d 100644
> > --- a/libavcodec/decode.c
> > +++ b/libavcodec/decode.c
> > @@ -1595,7 +1595,7 @@ static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame)
> >              // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2
> >              ret = av_image_fill_linesizes(linesize, avctx->pix_fmt, w);
> >              if (ret < 0)
> > -                return ret;
> > +                goto fail;
> >              // increase alignment of w for next try (rhs gives the lowest bit set in w)
> >              w += w & ~(w - 1);
> >  
> > @@ -1606,8 +1606,10 @@ static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame)
> >  
> >          tmpsize = av_image_fill_pointers(data, avctx->pix_fmt, h,
> >                                           NULL, linesize);
> > -        if (tmpsize < 0)
> > -            return tmpsize;
> > +        if (tmpsize < 0) {
> > +            ret = tmpsize;
> > +            goto fail;
> > +        }
> >  
> >          for (i = 0; i < 3 && data[i + 1]; i++)
> >              size[i] = data[i + 1] - data[i];
> 
> Nit: Not really a leak since the pool was not changed in any way if
> either of these two checks fail, so new calls to get_buffer2() or
> closing the context would free everything just fine.
> 
> LGTM with or without changing the commit message to say something about
> cleaning on error rather than fixing a leak.

Ah right, it actually becomes a leak with the previous patch. So maybe I
should just merge the two

-- 
Anton Khirnov


More information about the ffmpeg-devel mailing list