On Tue, Apr 21, 2015 at 01:52:05PM +0200, wm4 wrote:
> On Tue, 21 Apr 2015 13:22:00 +0200
> Michael Niedermayer <michae...@gmx.at> wrote:
> 
> > This indicates that its safe to use av_free/av_malloc on the IO context
> > 
> > Signed-off-by: Michael Niedermayer <michae...@gmx.at>
> > ---
> >  libavformat/avio.h    |    7 +++++++
> >  libavformat/aviobuf.c |    1 +
> >  libavformat/segment.c |    1 +
> >  libavformat/wtvdec.c  |    3 ++-
> >  4 files changed, 11 insertions(+), 1 deletion(-)
> > 
> > diff --git a/libavformat/avio.h b/libavformat/avio.h
> > index 51913e3..73d1645 100644
> > --- a/libavformat/avio.h
> > +++ b/libavformat/avio.h
> > @@ -196,6 +196,13 @@ typedef struct AVIOContext {
> >       * This field is internal to libavformat and access from outside is 
> > not allowed.
> >       */
> >      int orig_buffer_size;
> > +
> > +    /**
> > +     * The io buffer can be resized or freed with av_free / av_malloc.
> > +     * The user application does not keep a private copy of the buffer 
> > pointer
> > +     * which would become stale on such reallocation.
> > +     */
> > +    int resizeable;
> >  } AVIOContext;
> >  
> >  /* unbuffered I/O */
> > diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
> > index 7de59f1..b32ff9f 100644
> > --- a/libavformat/aviobuf.c
> > +++ b/libavformat/aviobuf.c
> > @@ -793,6 +793,7 @@ int ffio_fdopen(AVIOContext **s, URLContext *h)
> >          (*s)->read_seek  = (int64_t (*)(void *, int, int64_t, 
> > int))h->prot->url_read_seek;
> >      }
> >      (*s)->av_class = &ff_avio_class;
> > +    (*s)->resizeable = 1;
> >      return 0;
> >  }
> >  
> > diff --git a/libavformat/segment.c b/libavformat/segment.c
> > index 1162ea2..6504b46 100644
> > --- a/libavformat/segment.c
> > +++ b/libavformat/segment.c
> > @@ -511,6 +511,7 @@ static int open_null_ctx(AVIOContext **ctx)
> >          av_free(buf);
> >          return AVERROR(ENOMEM);
> >      }
> > +    (*ctx)->resizeable = 1;
> >      return 0;
> >  }
> >  
> > diff --git a/libavformat/wtvdec.c b/libavformat/wtvdec.c
> > index e226690..7b5477b 100644
> > --- a/libavformat/wtvdec.c
> > +++ b/libavformat/wtvdec.c
> > @@ -243,7 +243,8 @@ static AVIOContext * wtvfile_open_sector(int 
> > first_sector, uint64_t length, int
> >          av_freep(&buffer);
> >          av_freep(&wf->sectors);
> >          av_freep(&wf);
> > -    }
> > +    } else
> > +        pb->resizeable = 1;
> >      return pb;
> >  }
> >  
> 
> Isn't it already required by default that AVIOContext might resize the
> buffer?

technically yes, but theres alot of code, well possibly most code
using it that gets this wrong (videolan is one) and the consequences
are rather bad (double free and such)
so i think its better i we dont assume that the buffer can be resized
by default

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

He who knows, does not speak. He who speaks, does not know. -- Lao Tsu

Attachment: signature.asc
Description: Digital signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to