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 [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
