[FFmpeg-devel] [PATCH]lavf/icodec: Improve probe function

Michael Niedermayer michael at niedermayer.cc
Tue Jan 12 23:34:19 CET 2016


On Tue, Jan 12, 2016 at 08:33:47AM -0800, Michael Bradshaw wrote:
> Overall it looks good. I thought it might overflow the buffer but with
> AVPROBE_PADDING_SIZE it doesn't.
> 
> On Tue, Jan 12, 2016 at 7:09 AM, Carl Eugen Hoyos <cehoyos at ag.or.at> wrote:
> > diff --git a/libavformat/icodec.c b/libavformat/icodec.c
> > index 22e2099..9cf3dca 100644
> > --- a/libavformat/icodec.c
> > +++ b/libavformat/icodec.c
> > @@ -27,6 +27,7 @@
> >  #include "libavutil/intreadwrite.h"
> >  #include "libavcodec/bytestream.h"
> >  #include "libavcodec/bmp.h"
> > +#include "libavcodec/png.h"
> >  #include "avformat.h"
> >  #include "internal.h"
> >
> > @@ -44,9 +45,30 @@ typedef struct {
> >
> >  static int probe(AVProbeData *p)
> >  {
> > -    if (AV_RL16(p->buf) == 0 && AV_RL16(p->buf + 2) == 1 && AV_RL16(p->buf + 4))
> > -        return AVPROBE_SCORE_MAX / 4;
> > -    return 0;
> > +    unsigned i, frames = AV_RL16(p->buf + 4);
> > +
> > +    if (AV_RL16(p->buf) || AV_RL16(p->buf + 2) != 1 || !frames)
> > +        return 0;
> > +    for (i = 0; i < frames; i++) {
> > +        unsigned offset;
> > +        if (AV_RL16(p->buf + 10 + i * 16) & ~1) // color planes
> > +            return FFMIN(i, AVPROBE_SCORE_MAX / 4);
> > +        if (p->buf[13 + i * 16])
> > +            return FFMIN(i, AVPROBE_SCORE_MAX / 4);
> > +        if (AV_RL32(p->buf + 14 + i * 16) < 40)  // size
> > +            return FFMIN(i, AVPROBE_SCORE_MAX / 4);
> > +        offset = AV_RL32(p->buf + 18 + i * 16);
> > +        if (offset < 22)
> > +            return FFMIN(i, AVPROBE_SCORE_MAX / 4);
> > +        if (offset + 8 > p->buf_size)
> > +            return AVPROBE_SCORE_MAX / 4 + FFMIN(i, 1);
> > +        if (p->buf[offset] != 40 && AV_RB64(p->buf + offset) != PNGSIG)
> > +            return FFMIN(i, AVPROBE_SCORE_MAX / 4);
> > +        if (i * 16 + 6 > p->buf_size)
> > +            return AVPROBE_SCORE_MAX / 4;
> > +    }
> > +
> > +    return AVPROBE_SCORE_MAX / 4 + 1;
> 
> A score of 26 seems low to me, but maybe that's just me.

same feeling
either way LGTM

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

Concerning the gods, I have no means of knowing whether they exist or not
or of what sort they may be, because of the obscurity of the subject, and
the brevity of human life -- Protagoras
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160112/7e7ddc27/attachment.sig>


More information about the ffmpeg-devel mailing list