[FFmpeg-devel] [PATCH] Deprecate av_fifo_realloc() in favour of a safer av_fifo_realloc2()
Stefano Sabatini
stefano.sabatini-lala
Mon Aug 11 15:02:37 CEST 2008
On date Monday 2008-08-11 11:14:18 +0200, Stefano Sabatini encoded:
> On date Thursday 2008-08-07 12:38:00 +0200, Stefano Sabatini encoded:
> > On date Thursday 2008-08-07 00:58:09 +0200, Michael Niedermayer encoded:
> > > On Wed, Aug 06, 2008 at 12:01:32AM +0200, Stefano Sabatini wrote:
> > > > Hi all,
> > > >
> > > > in the case the av_malloc() performed in av_fifo_init() inside
> > > > av_fifo_relloc() fails, and if the buffer in the fifo to realloc
> > > > contains something, the av_fifo_realloc() issues a crash.
> > > >
> > > > Test application which reproduces the issue and my solution attached.
> > > >
> > > > Yes the libavutil minor version bump is missing.
> > > [...]
> > > > Index: libavutil/fifo.h
> > > > ===================================================================
> > > > --- libavutil/fifo.h (revision 14627)
> > > > +++ libavutil/fifo.h (working copy)
> > > > @@ -97,10 +97,19 @@
> > > > * Resizes an AVFifoBuffer.
> > > > * @param *f AVFifoBuffer to resize
> > > > * @param size new AVFifoBuffer size in bytes
> > > > + * @see av_fifo_realloc2()
> > > > */
> > > > -void av_fifo_realloc(AVFifoBuffer *f, unsigned int size);
> > > > +attribute_deprecated void av_fifo_realloc(AVFifoBuffer *f, unsigned int size);
> > > >
> > >
> > > should be under #if VERSION < ...
> >
> > Yes, if this is OK I'm also going to remove the unnecessary doxy in
> > fifo.c
> >
> > Regards.
> > --
> > FFmpeg = Foolish and Freak Monstrous Portentous Exxagerate Gadget
>
> > Index: libavutil/avutil.h
> > ===================================================================
> > --- libavutil/avutil.h (revision 14660)
> > +++ libavutil/avutil.h (working copy)
> > @@ -35,7 +35,7 @@
> > #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
> >
> > #define LIBAVUTIL_VERSION_MAJOR 49
> > -#define LIBAVUTIL_VERSION_MINOR 7
> > +#define LIBAVUTIL_VERSION_MINOR 8
> > #define LIBAVUTIL_VERSION_MICRO 0
> >
> > #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
> > Index: libavutil/fifo.h
> > ===================================================================
> > --- libavutil/fifo.h (revision 14660)
> > +++ libavutil/fifo.h (working copy)
> > @@ -93,14 +93,25 @@
> > */
> > int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int));
> >
> > +#if LIBAVUTIL_VERSION_MAJOR < 50
> > /**
> > * Resizes an AVFifoBuffer.
> > * @param *f AVFifoBuffer to resize
> > * @param size new AVFifoBuffer size in bytes
> > + * @see av_fifo_realloc2()
> > */
> > -void av_fifo_realloc(AVFifoBuffer *f, unsigned int size);
> > +attribute_deprecated void av_fifo_realloc(AVFifoBuffer *f, unsigned int size);
> > +#endif
> >
> > /**
> > + * Resizes an AVFifoBuffer.
> > + * @param *f AVFifoBuffer to resize
> > + * @param size new AVFifoBuffer size in bytes
> > + * @return <0 for failure >=0 otherwise
> > + */
> > +int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size);
> > +
> > +/**
> > * Reads and discards the specified amount of data from an AVFifoBuffer.
> > * @param *f AVFifoBuffer to read from
> > * @param size amount of data to read in bytes
> > Index: libavutil/fifo.c
> > ===================================================================
> > --- libavutil/fifo.c (revision 14660)
> > +++ libavutil/fifo.c (working copy)
> > @@ -51,22 +51,30 @@
> > return av_fifo_generic_read(f, buf_size, NULL, buf);
> > }
> >
> > +#if LIBAVUTIL_VERSION_MAJOR < 50
> > /**
> > * Resizes a FIFO.
> > */
> > void av_fifo_realloc(AVFifoBuffer *f, unsigned int new_size) {
> > + av_fifo_realloc2(f, new_size);
> > +}
> > +#endif
> > +
> > +int av_fifo_realloc2(AVFifoBuffer *f, unsigned int new_size) {
> > unsigned int old_size= f->end - f->buffer;
> >
> > if(old_size <= new_size){
> > int len= av_fifo_size(f);
> > AVFifoBuffer f2;
> >
> > - av_fifo_init(&f2, new_size);
> > + if (av_fifo_init(&f2, new_size) < 0)
> > + return -1;
> > av_fifo_read(f, f2.buffer, len);
> > f2.wptr += len;
> > av_free(f->buffer);
> > *f= f2;
> > }
> > + return 0;
> > }
> >
> > void av_fifo_write(AVFifoBuffer *f, const uint8_t *buf, int size)
>
> Ping?
If there are no objections then I'll apply it on Wednesday (then I'll
provide further patches to fix the deprecation warnings).
Regards.
--
FFmpeg = Free Fostering Mastering Patchable Erroneous Game
More information about the ffmpeg-devel
mailing list