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