id3v2: don't discard the whole tag when encountering empty frames.

While they're technically invalid, it's better to skip them and try to
read the rest of the tag.
This commit is contained in:
Anton Khirnov 2011-10-02 07:16:09 +02:00
parent 24ec9ac475
commit 1e18d32d01

View File

@ -401,13 +401,19 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t
tag[3] = 0;
tlen = avio_rb24(s->pb);
}
if (tlen <= 0 || tlen > len - taghdrlen) {
if (tlen < 0 || tlen > len - taghdrlen) {
av_log(s, AV_LOG_WARNING, "Invalid size in frame %s, skipping the rest of tag.\n", tag);
break;
}
len -= taghdrlen + tlen;
next = avio_tell(s->pb) + tlen;
if (!tlen) {
if (tag[0])
av_log(s, AV_LOG_DEBUG, "Invalid empty frame %s, skipping.\n", tag);
continue;
}
if (tflags & ID3v2_FLAG_DATALEN) {
avio_rb32(s->pb);
tlen -= 4;