On Sun, Aug 13, 2017 at 07:18:11PM -0300, James Almer wrote:
> On 8/13/2017 7:15 PM, Michael Niedermayer wrote:
> > Fixes: undefined behavior
> > 
> > Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc>
> > ---
> >  libavcodec/rangecoder.c | 1 +
> >  libavcodec/rangecoder.h | 8 ++++++--
> >  2 files changed, 7 insertions(+), 2 deletions(-)
> > 
> > diff --git a/libavcodec/rangecoder.c b/libavcodec/rangecoder.c
> > index 0bb79c880e..0d53bef076 100644
> > --- a/libavcodec/rangecoder.c
> > +++ b/libavcodec/rangecoder.c
> > @@ -58,6 +58,7 @@ av_cold void ff_init_range_decoder(RangeCoder *c, const 
> > uint8_t *buf,
> >  
> >      c->low         = AV_RB16(c->bytestream);
> >      c->bytestream += 2;
> > +    c->overread    = 0;
> >      if (c->low >= 0xFF00) {
> >          c->low = 0xFF00;
> >          c->bytestream_end = c->bytestream;
> > diff --git a/libavcodec/rangecoder.h b/libavcodec/rangecoder.h
> > index c3e81d0dcb..44af88b8f5 100644
> > --- a/libavcodec/rangecoder.h
> > +++ b/libavcodec/rangecoder.h
> > @@ -42,6 +42,8 @@ typedef struct RangeCoder {
> >      uint8_t *bytestream_start;
> >      uint8_t *bytestream;
> >      uint8_t *bytestream_end;
> > +    int overread;
> > +#define MAX_OVERREAD 2
> >  } RangeCoder;
> >  
> >  void ff_init_range_encoder(RangeCoder *c, uint8_t *buf, int buf_size);
> > @@ -106,9 +108,11 @@ static inline void refill(RangeCoder *c)
> >      if (c->range < 0x100) {
> >          c->range <<= 8;
> >          c->low   <<= 8;
> > -        if (c->bytestream < c->bytestream_end)
> > +        if (c->bytestream < c->bytestream_end) {
> >              c->low += c->bytestream[0];
> > -        c->bytestream++;
> > +            c->bytestream++;
> > +        } else
> > +            c->overread ++;
> >      }
> >  }
> 
> Wouldn't it be better to port this to the bytestream2 reading api?

this is speed relevant code, i am not sure bytestream2 wouldnt add
overhead. In fact i wasnt entirely sure keeping track of the overread
bytes is a great idea. But i didnt see an easy way to avoid that.


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Take away the freedom of one citizen and you will be jailed, take away
the freedom of all citizens and you will be congratulated by your peers
in Parliament.

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