]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
flacdec: When there is not enough data to read the next header block,
authorjbr <jbr@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Wed, 4 Mar 2009 01:08:26 +0000 (01:08 +0000)
committerjbr <jbr@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Wed, 4 Mar 2009 01:08:26 +0000 (01:08 +0000)
reset the bitstream reader instead of skipping backwards.

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@17798 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/flacdec.c

index 13549d8ccfc450d01bf9911d2eaf489e539a36be..b8ae73fea9ad674c5aaae5447e85a939c36bf666 100644 (file)
@@ -229,7 +229,6 @@ void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s,
 static int metadata_parse(FLACContext *s)
 {
     int i, metadata_last, metadata_type, metadata_size;
-    int initial_pos= get_bits_count(&s->gb);
 
     skip_bits_long(&s->gb, 32);
 
@@ -239,7 +238,8 @@ static int metadata_parse(FLACContext *s)
         metadata_size = get_bits_long(&s->gb, 24);
 
         if (get_bits_count(&s->gb) + 8*metadata_size > s->gb.size_in_bits) {
-            skip_bits_long(&s->gb, initial_pos - get_bits_count(&s->gb));
+            /* need more data. reset the bitstream reader and return. */
+            init_get_bits(&s->gb, s->gb.buffer, s->gb.size_in_bits);
             break;
         }