From 8cb3c557a9f3b24bc55325e3f64a2150b983305c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Reimar=20D=C3=B6ffinger?= Date: Mon, 31 Jan 2011 19:16:38 +0000 Subject: [PATCH] Ogg: discard non-essential metadata from Vorbis header when creating extradata The first part of the metadata, the "vendor" string, is required by libvorbis, it will refuse to play when it is not available. Also we do not currently parse that part into metadata so it would also be lost if we removed it as well. Signed-off-by: Mans Rullgard --- libavformat/oggparsevorbis.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c index d743d25e2..34ae2fc4f 100644 --- a/libavformat/oggparsevorbis.c +++ b/libavformat/oggparsevorbis.c @@ -256,8 +256,16 @@ vorbis_header (AVFormatContext * s, int idx) st->time_base.den = srate; } } else if (os->buf[os->pstart] == 3) { - if (os->psize > 8) - ff_vorbis_comment (s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8); + if (os->psize > 8 && + ff_vorbis_comment(s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8) >= 0) { + // drop all metadata we parsed and which is not required by libvorbis + unsigned new_len = 7 + 4 + AV_RL32(priv->packet[1] + 7) + 4 + 1; + if (new_len >= 16 && new_len < os->psize) { + AV_WL32(priv->packet[1] + new_len - 5, 0); + priv->packet[1][new_len - 1] = 1; + priv->len[1] = new_len; + } + } } else { st->codec->extradata_size = fixup_vorbis_headers(s, priv, &st->codec->extradata); -- 2.11.0