summaryrefslogtreecommitdiff
path: root/libavformat/oggdec.c
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2013-08-18 17:40:51 +0200
committerLuca Barbato <lu_zero@gentoo.org>2013-08-19 05:20:39 +0200
commit9a27acae9e6b7d0bf74c5b878af9c42495a546f3 (patch)
tree436e882219037ceb840a114d7c261260867c665d /libavformat/oggdec.c
parent0a14fefd68cc18ce3252edff8a05ee9b3945b694 (diff)
ogg: Fix potential infinite discard loop
Seeking in certain broken files would cause ogg_read_timestamp to fail because ogg_packet would go into a state where all packets of stream 1 would be discarded until the end of the stream. Bug-Id: 553 CC: libav-stable@libav.org Signed-off-by: Jan Gerber <j@v2v.cc> Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavformat/oggdec.c')
-rw-r--r--libavformat/oggdec.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index 6514c5b153..d22d5bc5b8 100644
--- a/libavformat/oggdec.c
+++ b/libavformat/oggdec.c
@@ -384,7 +384,11 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
if (!complete && os->segp == os->nsegs) {
ogg->curidx = -1;
- os->incomplete = 1;
+ // Do not set incomplete for empty packets.
+ // Together with the code in ogg_read_page
+ // that discards all continuation of empty packets
+ // we would get an infinite loop.
+ os->incomplete = !!os->psize;
}
} while (!complete);