From 98975cf4b39d2329ed4a34751115257f39661519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Tue, 1 Mar 2011 18:16:08 +0100 Subject: [PATCH] Skip over extensions in RTP header. Ticket #388 --- src/iptv_input.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/iptv_input.c b/src/iptv_input.c index 8a4b2bd7..44938edc 100644 --- a/src/iptv_input.c +++ b/src/iptv_input.c @@ -124,7 +124,7 @@ iptv_ts_input(service_t *t, const uint8_t *tsb) static void * iptv_thread(void *aux) { - int nfds, fd, r, j; + int nfds, fd, r, j, hlen; uint8_t tsb[65536], *buf; struct epoll_event ev; service_t *t; @@ -158,7 +158,17 @@ iptv_thread(void *aux) if((tsb[1] & 0x7f) != 33) continue; - int hlen = (tsb[0] & 0xf) * 4 + 12; + hlen = (tsb[0] & 0xf) * 4 + 12; + + if(tsb[0] & 0x10) { + // Extension (X bit) == true + + if(r < hlen + 4) + continue; // Packet size < hlen + extension header + + // Skip over extension header (last 2 bytes of header is length) + hlen += ((tsb[hlen + 2] << 8) | tsb[hlen + 3]) * 4; + } if(r < hlen || (r - hlen) % 188 != 0) continue;