Fix segfault on UDP reading
authorAndrey Utkin <andrey.krieger.utkin@gmail.com>
Thu, 3 Nov 2011 07:00:15 +0000 (07:00 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 9 Nov 2011 02:43:52 +0000 (03:43 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/udp.c

index 151e070..59d1f74 100644 (file)
@@ -546,15 +546,19 @@ static int udp_read(URLContext *h, uint8_t *buf, int size)
             avail = av_fifo_size(s->fifo);
             if (avail) { // >=size) {
                 uint8_t tmp[4];
+                int skip = 0;
 
                 av_fifo_generic_read(s->fifo, tmp, 4, NULL);
                 avail= AV_RL32(tmp);
                 if(avail > size){
                     av_log(h, AV_LOG_WARNING, "Part of datagram lost due to insufficient buffer size\n");
+                    skip = avail - size;
                     avail= size;
                 }
 
                 av_fifo_generic_read(s->fifo, buf, avail, NULL);
+                if (skip)
+                    av_fifo_drain(s->fifo, skip);
                 return avail;
             }
             else {