# HG changeset patch # User mstorsjo # Date 1283077184 0 # Node ID 6bb1bf74f9ce7f5ee029d20c94b34e7e696233fb # Parent e3eb93b5a11968efc98b3dd62209a788a8f3f924 rtpdec: Read RTCP compound packets Patch by Josh Allmann, joshua dot allmann at gmail diff -r e3eb93b5a119 -r 6bb1bf74f9ce rtpdec.c --- a/rtpdec.c Sun Aug 29 10:16:54 2010 +0000 +++ b/rtpdec.c Sun Aug 29 10:19:44 2010 +0000 @@ -74,12 +74,28 @@ static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int len) { - if (buf[1] != RTCP_SR) - return -1; + int payload_len; + while (len >= 2) { + switch (buf[1]) { + case RTCP_SR: + if (len < 16) { + av_log(NULL, AV_LOG_ERROR, "Invalid length for RTCP SR packet\n"); + return AVERROR_INVALIDDATA; + } + payload_len = (AV_RB16(buf + 2) + 1) * 4; + s->last_rtcp_ntp_time = AV_RB64(buf + 8); if (s->first_rtcp_ntp_time == AV_NOPTS_VALUE) s->first_rtcp_ntp_time = s->last_rtcp_ntp_time; s->last_rtcp_timestamp = AV_RB32(buf + 16); + + buf += payload_len; + len -= payload_len; + break; + default: + return -1; + } + } return 0; }