From: Martin Storsjo Date: Mon, 21 May 2012 15:17:30 +0000 (+0300) Subject: Buffer more data before returning successfully from HTTP_read, if needed X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=895392a7161ceb37ac32b3fb4a910b350361b13f;p=rtmpdump Buffer more data before returning successfully from HTTP_read, if needed This fixes issues if the http header and the payload data are sent in separate packets (as they normally are), and the buffer contains the full header but none of the payload. --- diff --git a/librtmp/rtmp.c b/librtmp/rtmp.c index 83f3247..0d28666 100644 --- a/librtmp/rtmp.c +++ b/librtmp/rtmp.c @@ -3846,6 +3846,7 @@ HTTP_read(RTMP *r, int fill) char *ptr; int hlen; +restart: if (fill) RTMPSockBuf_Fill(&r->m_sb); if (r->m_sb.sb_size < 144) @@ -3865,6 +3866,12 @@ HTTP_read(RTMP *r, int fill) if (!ptr) return -1; ptr += 4; + if (ptr + (r->m_clientID.av_val ? 1 : hlen) > r->m_sb.sb_start + r->m_sb.sb_size) + { + if (fill) + goto restart; + return -2; + } r->m_sb.sb_size -= ptr - r->m_sb.sb_start; r->m_sb.sb_start = ptr; r->m_unackd--;