[FFmpeg-devel] [PATCH] rmdec.c: correctly skip indexes

Kostya kostya.shishkov
Tue Mar 10 07:14:20 CET 2009


On Mon, Mar 09, 2009 at 11:57:58PM -0400, Ronald S. Bultje wrote:
> Hi,
> 
> On Mon, Mar 9, 2009 at 6:14 PM, Reimar D?ffinger
> <Reimar.Doeffinger at gmx.de> wrote:
> > The indendation is off. Also I think moving the 20 to the other side
> > obfuscates things. Consider of maybe this is better:
> [..]
> 
> Almost copied, I kept the n_pkts variable because I'd like to print it
> in the log msg if output is wrong, and renamed the fixed_len variable
> to something more sensible (expected_len).
> 
> See attached, thanks for the comments. :-).
> 
> Ronald

> Index: ffmpeg-svn/libavformat/rmdec.c
> ===================================================================
> --- ffmpeg-svn.orig/libavformat/rmdec.c	2009-03-09 23:54:17.000000000 -0400
> +++ ffmpeg-svn/libavformat/rmdec.c	2009-03-09 23:55:56.000000000 -0400
> @@ -440,7 +440,19 @@
>              state= (state<<8) + get_byte(pb);
>  
>              if(state == MKBETAG('I', 'N', 'D', 'X')){
> -                len = get_be16(pb) - 6;
> +                int n_pkts, expected_len;
> +                len = get_be32(pb);
> +                url_fskip(pb, 2);
> +                n_pkts = get_be32(pb);
> +                expected_len = 20 + n_pkts * 14;
> +                if (len == 20)
> +                    /* some files don't add index entries to chunk size... */
> +                    len = expected_len;
> +                else if (len != expected_len)
> +                    av_log(s, AV_LOG_WARNING,
> +                           "Index size %d (%d pkts) is wrong, should be %d.\n",
> +                           len, n_pkts, expected_len);
> +                len -= 14; // we already read part of the index header
>                  if(len<0)
>                      continue;
>                  goto skip;

ok (additionally one can understand what it does without RM documentation :)




More information about the ffmpeg-devel mailing list