summaryrefslogtreecommitdiff
path: root/libavformat/udp.c
diff options
context:
space:
mode:
authorAndrey Utkin <andrey.krieger.utkin@gmail.com>2011-11-03 07:00:15 +0000
committerMichael Niedermayer <michaelni@gmx.at>2011-11-09 03:43:52 +0100
commit7a032cb97f743a651138d2da6214c79e0ce089dd (patch)
tree4ebcf030231ace21bc96978b1ca37a2ec9f2296d /libavformat/udp.c
parent4354788a893d3633cb9f94932b4c075377a4b324 (diff)
Fix segfault on UDP reading
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/udp.c')
-rw-r--r--libavformat/udp.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libavformat/udp.c b/libavformat/udp.c
index 151e070d19..59d1f74d77 100644
--- a/libavformat/udp.c
+++ b/libavformat/udp.c
@@ -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 {