[FFmpeg-devel] [PATCH] lavf/aiffdec: handle files with ID3 data larger than ID3 chunk size

Paul B Mahol onemda at gmail.com
Wed Jan 16 11:37:03 CET 2013


On 1/16/13, Matthieu Bouron <matthieu.bouron at gmail.com> wrote:
> On Wed, Jan 16, 2013 at 02:37:19AM +0100, Michael Niedermayer wrote:
>> On Wed, Jan 16, 2013 at 01:18:09AM +0100, Matthieu Bouron wrote:
>> > On Wed, Jan 16, 2013 at 12:34:31AM +0100, Michael Niedermayer wrote:
>> > > On Tue, Jan 15, 2013 at 10:49:01PM +0100, Matthieu Bouron wrote:
>> > > > ---
>> > > >  libavformat/aiffdec.c | 7 +++++++
>> > > >  1 file changed, 7 insertions(+)
>> > > >
>> > > > diff --git a/libavformat/aiffdec.c b/libavformat/aiffdec.c
>> > > > index 8d466fa..b6a7946 100644
>> > > > --- a/libavformat/aiffdec.c
>> > > > +++ b/libavformat/aiffdec.c
>> > > > @@ -193,6 +193,7 @@ static int aiff_read_header(AVFormatContext *s)
>> > > >  {
>> > > >      int ret, size, filesize;
>> > > >      int64_t offset = 0;
>> > > > +    int64_t tag_size, tag_offset;
>> > > >      uint32_t tag;
>> > > >      unsigned version = AIFF_C_VERSION1;
>> > > >      AVIOContext *pb = s->pb;
>> > > > @@ -236,6 +237,7 @@ static int aiff_read_header(AVFormatContext *s)
>> > > >                  goto got_sound;
>> > > >              break;
>> > > >          case MKTAG('I', 'D', '3', ' '):
>> > > > +            tag_offset = avio_tell(pb);
>> > > >              ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC,
>> > > > &id3v2_extra_meta);
>> > > >              if (id3v2_extra_meta)
>> > > >                  if ((ret = ff_id3v2_parse_apic(s,
>> > > > &id3v2_extra_meta)) < 0) {
>> > > > @@ -243,6 +245,11 @@ static int aiff_read_header(AVFormatContext
>> > > > *s)
>> > > >                      return ret;
>> > > >                  }
>> > > >              ff_id3v2_free_extra_meta(&id3v2_extra_meta);
>> > > > +            tag_size = avio_tell(pb) - tag_offset;
>> > > > +            if (tag_size > size) {
>> > > > +                av_log(s, AV_LOG_WARNING, "ID3 data is larger than
>> > > > ID3 chunk size\n");
>> > > > +                avio_seek(pb, tag_size - size, SEEK_SET);
>> > > > +            }
>> > >
>> > > to which point do you try to seek here ?
>> > > this looks like you try to do a absolute seek with a relative value
>> > >
>> >
>> > Sorry for the messy patch :(, I didn't intend to seek anywhere but
>> > just to decrease the filesize variable according to the difference
>> > between tag_size and size.
>> > New patch attached.
>>
>> so when the sizes mismatch a correct tag is at position after the
>> larger size ?
>
> No, the samples i have have the ID3 chunk at the end of the file and the
> ID3
> data is larger than the declared ID3 chunk size by one byte.

aligned to 2 byte boundary?

>
> Unfortunately, i can't provide any samples since those are files i
> bought from on online music store.
>
> [...]
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list