On Thu, Oct 16, 2014 at 11:44:47AM +0200, Benoit Fouet wrote: > Some encoders do not use syncsafe sizes in v2.4 id3 tags. Check the next > tag to try to choose between the two. > > Fixes ticket #4003 > --- > libavformat/id3v2.c | 42 +++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 41 insertions(+), 1 deletion(-) > > diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c > index 5469e0a..3bccd76 100644 > --- a/libavformat/id3v2.c > +++ b/libavformat/id3v2.c > @@ -170,6 +170,23 @@ static unsigned int get_size(AVIOContext *s, int len) > return v; > } > > +/* No real verification, only check that the tag consists of > + * a combination of capital alpha-numerical characters */ > +static int is_tag(const char *buf, int len) > +{ > + if (!len) > + return 0; > + > + while (len--) > + if ((buf[len] < 'A' || > + buf[len] > 'Z') && > + (buf[len] < '0' || > + buf[len] > '9')) > + return 0; > + > + return 1; > +} > + > /** > * Free GEOB type extra metadata. > */ > @@ -734,8 +751,31 @@ static void id3v2_parse(AVIOContext *pb, AVDictionary > **metadata, > tag[4] = 0; > if (version == 3) { > tlen = avio_rb32(pb); > - } else > + } else { > tlen = get_size(pb, 4); > + if (tlen > 0x7f) {
i think that check isnt sufficient to detect that the 2 readings differ. For example 0xFF would be read as 0xFF by one and 0x7F by the other and would not trigger this also maybe len could be used to distingish a subset of cases and there is the problem with seekable=0 streams where seeking back might fail, not sure what to do in that case ... [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB He who knows, does not speak. He who speaks, does not know. -- Lao Tsu
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel