aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Cunningham <chcunningham@chromium.org>2016-05-09 15:27:29 -0700
committerMichael Niedermayer <michael@niedermayer.cc>2016-06-05 02:40:30 +0200
commit069eea16d975643bee6a42643c9bac54f170ee9c (patch)
treea6e45a802aa5b10f7de04753e9b701fc80869f56
parent79181b97d477386e26bd1d4d476b33376f194c96 (diff)
downloadffmpeg-069eea16d975643bee6a42643c9bac54f170ee9c.tar.gz
libavformat/oggdec: Free stream private when header parsing fails.
Leaking this private structure opens up the possibility that it may be re-used when parsing later packets in the stream. This is problematic if the later packets are not the same codec type (e.g. private allocated during Vorbis parsing, but later packets are Opus and the private is assumed to be the oggopus_private type in opus_header()). Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 542f725964e52201000ec34e2f23229cf534ad3a) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavformat/oggdec.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index 2d99b4af25..8f3b44c3c5 100644
--- a/libavformat/oggdec.c
+++ b/libavformat/oggdec.c
@@ -701,6 +701,7 @@ static int ogg_read_header(AVFormatContext *s)
if (ogg->streams[i].header < 0) {
av_log(s, AV_LOG_ERROR, "Header parsing failed for stream %d\n", i);
ogg->streams[i].codec = NULL;
+ av_freep(&ogg->streams[i].private);
} else if (os->codec && os->nb_header < os->codec->nb_header) {
av_log(s, AV_LOG_WARNING,
"Headers mismatch for stream %d: "