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

Reply via email to