# HG changeset patch # User reimar # Date 1363517441 0 # Node ID ae62be3d8de2ec294d4e83006f7f9e132291998d # Parent 6065fb95813eb71746055bf3c01f113c61c0b464 Handle the severely broken headers QuickTime Streaming Server sends. Instead of ending the header with \r\n\r\n it ends with \r\n<4 byte MP3 header>\r\n. And programs like wget just silently accept this without even printing a warning!! diff -r 6065fb95813e -r ae62be3d8de2 stream/http.c --- a/stream/http.c Sun Mar 17 10:16:49 2013 +0000 +++ b/stream/http.c Sun Mar 17 10:50:41 2013 +0000 @@ -348,6 +348,7 @@ if( http_hdr==NULL ) return -1; if( http_hdr->buffer==NULL ) return 0; // empty + if(http_hdr->buffer_size > 128*1024) return 1; if( strstr(http_hdr->buffer, "\r\n\r\n")==NULL && strstr(http_hdr->buffer, "\n\n")==NULL ) return 0; return 1; @@ -412,12 +413,12 @@ hdr_sep_len = 4; ptr = strstr( http_hdr->buffer, "\r\n\r\n" ); if( ptr==NULL ) { + hdr_sep_len = 2; ptr = strstr( http_hdr->buffer, "\n\n" ); if( ptr==NULL ) { mp_msg(MSGT_NETWORK,MSGL_ERR,"Header may be incomplete. No CRLF CRLF found.\n"); - return -1; + hdr_sep_len = 0; } - hdr_sep_len = 2; } pos_hdr_sep = ptr-http_hdr->buffer; @@ -427,7 +428,12 @@ ptr = hdr_ptr; while( *ptr!='\r' && *ptr!='\n' ) ptr++; len = ptr-hdr_ptr; - if( len==0 ) break; + if (len == 0 || !memchr(hdr_ptr, ':', len)) { + mp_msg(MSGT_NETWORK, MSGL_ERR, "Broken response header, missing ':'\n"); + pos_hdr_sep = ptr - http_hdr->buffer; + hdr_sep_len = 0; + break; + } if (len > 16 && !strncasecmp(hdr_ptr + 4, "icy-metaint:", 12)) { mp_msg(MSGT_NETWORK, MSGL_WARN, "Server sent a severely broken icy-metaint HTTP header!\n");