Fix for Real "old" files version 3 with no 4cc. Fixes thankyou144.ra
authorRoberto Togni <r_togni@tiscali.it>
Mon, 19 Dec 2005 20:49:00 +0000 (20:49 +0000)
committerRoberto Togni <r_togni@tiscali.it>
Mon, 19 Dec 2005 20:49:00 +0000 (20:49 +0000)
Based on patch by "mkhodor7 <-> yahoo | com"

Originally committed as revision 4759 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/rm.c

index 109201154b551b97136fb4f3410ebe4149b79c89..3553e4a6c0118ffab73d0415d8876898e71b56be 100644 (file)
@@ -488,13 +488,14 @@ static void rm_read_audio_stream_info(AVFormatContext *s, AVStream *st,
 {
     RMContext *rm = s->priv_data;
     ByteIOContext *pb = &s->pb;
-    char buf[128];
+    char buf[256];
     uint32_t version;
     int i;
 
     /* ra type header */
     version = get_be32(pb); /* version */
     if (((version >> 16) & 0xff) == 3) {
+        int64_t startpos = url_ftell(pb);
         /* very old version */
         for(i = 0; i < 14; i++)
             get_byte(pb);
@@ -502,8 +503,14 @@ static void rm_read_audio_stream_info(AVFormatContext *s, AVStream *st,
         get_str8(pb, s->author, sizeof(s->author));
         get_str8(pb, s->copyright, sizeof(s->copyright));
         get_str8(pb, s->comment, sizeof(s->comment));
+        if ((startpos + (version & 0xffff)) >= url_ftell(pb) + 2) {
+        // fourcc (should always be "lpcJ")
         get_byte(pb);
         get_str8(pb, buf, sizeof(buf));
+        }
+        // Skip extra header crap (this should never happen)
+        if ((startpos + (version & 0xffff)) > url_ftell(pb))
+            url_fskip(pb, (version & 0xffff) + startpos - url_ftell(pb));
         st->codec->sample_rate = 8000;
         st->codec->channels = 1;
         st->codec->codec_type = CODEC_TYPE_AUDIO;