Module: libav
Branch: master
Commit: 9a27acae9e6b7d0bf74c5b878af9c42495a546f3

Author:    Reimar Döffinger <[email protected]>
Committer: Luca Barbato <[email protected]>
Date:      Sun Aug 18 17:40:51 2013 +0200

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: [email protected]

Signed-off-by: Jan Gerber <[email protected]>
Signed-off-by: Luca Barbato <[email protected]>

---

 libavformat/oggdec.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index 6514c5b..d22d5bc 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);
 

_______________________________________________
libav-commits mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-commits

Reply via email to