dmitry Tue Jul 24 09:27:47 2007 UTC Modified files: (Branch: PHP_5_2) /php-src NEWS /php-src/ext/soap php_http.c Log: Fixed bug #41983 (Error Fetching http headers terminated by '\n') http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.848&r2=1.2027.2.547.2.849&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.848 php-src/NEWS:1.2027.2.547.2.849 --- php-src/NEWS:1.2027.2.547.2.848 Tue Jul 24 09:26:34 2007 +++ php-src/NEWS Tue Jul 24 09:27:46 2007 @@ -68,6 +68,7 @@ - Fixed bug #42015 (ldap_rename(): server error "DSA is unwilling to perform"). (bob at mroczka dot com, Jani) - Fixed bug #41989 (move_uploaded_file() & relative path in ZTS mode). (Tony) +- Fixed bug #41983 (Error Fetching http headers terminated by '\n'). (Dmitry) - Fixed bug #41964 (strtotime returns a timestamp for non-time string of pattern '(A|a) .+'). (Derick) - Fixed bug #41961 (Ensure search for hidden private methods does not stray http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_http.c?r1=1.77.2.11.2.11&r2=1.77.2.11.2.12&diff_format=u Index: php-src/ext/soap/php_http.c diff -u php-src/ext/soap/php_http.c:1.77.2.11.2.11 php-src/ext/soap/php_http.c:1.77.2.11.2.12 --- php-src/ext/soap/php_http.c:1.77.2.11.2.11 Fri Jul 13 09:14:03 2007 +++ php-src/ext/soap/php_http.c Tue Jul 24 09:27:46 2007 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_http.c,v 1.77.2.11.2.11 2007/07/13 09:14:03 dmitry Exp $ */ +/* $Id: php_http.c,v 1.77.2.11.2.12 2007/07/24 09:27:46 dmitry Exp $ */ #include "php_soap.h" #include "ext/standard/base64.h" @@ -1153,17 +1153,19 @@ /* match */ tmp = pos + typelen; - eol = strstr(tmp, "\r\n"); + eol = strchr(tmp, '\n'); if (eol == NULL) { eol = headers + headerslen; + } else if (eol > tmp && *(eol-1) == '\r') { + eol--; } return estrndup(tmp, eol - tmp); } /* find next line */ - pos = strstr(pos, "\r\n"); + pos = strchr(pos, '\n'); if (pos) { - pos += 2; + pos++; } } while (pos); @@ -1203,7 +1205,7 @@ } if (header_chunked) { - char done, chunk_size[10]; + char ch, done, chunk_size[10], headerbuf[8192]; done = FALSE; @@ -1231,11 +1233,20 @@ len_size += len_read; http_buf_size += len_read; } - } - /* Eat up '\r' '\n' */ - php_stream_getc(stream); - php_stream_getc(stream); + /* Eat up '\r' '\n' */ + ch = php_stream_getc(stream); + if (ch == '\r') { + ch = php_stream_getc(stream); + } + if (ch != '\n') { + /* Somthing wrong in chunked encoding */ + if (http_buf) { + efree(http_buf); + } + return FALSE; + } + } } else { /* Somthing wrong in chunked encoding */ if (http_buf) { @@ -1248,6 +1259,19 @@ } } + /* Ignore trailer headers */ + while (1) { + if (!php_stream_gets(stream, headerbuf, sizeof(headerbuf))) { + break; + } + + if ((headerbuf[0] == '\r' && headerbuf[1] == '\n') || + (headerbuf[0] == '\n')) { + /* empty line marks end of headers */ + break; + } + } + if (http_buf == NULL) { http_buf = emalloc(1); } @@ -1294,7 +1318,8 @@ break; } - if (strcmp(headerbuf, "\r\n") == 0) { + if ((headerbuf[0] == '\r' && headerbuf[1] == '\n') || + (headerbuf[0] == '\n')) { /* empty line marks end of headers */ done = TRUE; break;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php