// for NuppelVideo (nuv.c)
{ AV_CODEC_ID_PCM_S16LE, MKTAG('R', 'A', 'W', 'A') },
{ AV_CODEC_ID_MP3, MKTAG('L', 'A', 'M', 'E') },
- { AV_CODEC_ID_MP3, MKTAG('M', 'P', '3', ' ') },
{ AV_CODEC_ID_NONE, 0 },
};
chunk_code = avio_rl32(pb);
chunk_size = avio_rl32(pb);
+
if (chunk_size > end || end - chunk_size < cur || chunk_size == UINT_MAX) {
- av_log(s, AV_LOG_ERROR, "too big INFO subchunk\n");
- return AVERROR_INVALIDDATA;
+ av_log(s, AV_LOG_WARNING, "too big INFO subchunk\n");
+ break;
}
chunk_size += (chunk_size & 1);
+ if (!chunk_code) {
+ if (chunk_size)
+ avio_skip(pb, chunk_size);
+ continue;
+ }
+
value = av_malloc(chunk_size + 1);
if (!value) {
av_log(s, AV_LOG_ERROR, "out of memory, unable to read INFO tag\n");
if (avio_read(pb, value, chunk_size) != chunk_size) {
av_free(value);
- av_log(s, AV_LOG_ERROR, "premature end of file while reading INFO tag\n");
- return AVERROR_INVALIDDATA;
+ av_log(s, AV_LOG_WARNING, "premature end of file while reading INFO tag\n");
+ break;
}
value[chunk_size] = 0;