dmitry          Wed Dec  1 13:22:24 2004 EDT

  Modified files:              (Branch: PHP_5_0)
    /php-src    NEWS 
    /php-src/ext/soap   php_http.c 
  Log:
  Fixed bug #30329 (Error Fetching http body, No Content-Length, connection 
closed or chunked data).
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1760.2.136&r2=1.1760.2.137&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1760.2.136 php-src/NEWS:1.1760.2.137
--- php-src/NEWS:1.1760.2.136   Wed Dec  1 11:59:23 2004
+++ php-src/NEWS        Wed Dec  1 13:22:23 2004
@@ -44,6 +44,8 @@
 - Fixed bug #30356 (str_ireplace() does not work on all strings). (Ilia)
 - Fixed bug #30344 (Reflection::getModifierNames() returns too long strings).
   (Marcus)
+- Fixed bug #30329 (Error Fetching http body, No Content-Length, connection
+  closed or chunked data). (Dmitry)
 - Fixed bug #30282 (segfault when using unknown/unsupported 
   session.save_handler and/or session.serialize_handler). (Tony)
 - Fixed bug #30281 (Prevent non-wbmp images from being detected as such).
http://cvs.php.net/diff.php/php-src/ext/soap/php_http.c?r1=1.55.2.4&r2=1.55.2.5&ty=u
Index: php-src/ext/soap/php_http.c
diff -u php-src/ext/soap/php_http.c:1.55.2.4 
php-src/ext/soap/php_http.c:1.55.2.5
--- php-src/ext/soap/php_http.c:1.55.2.4        Wed Dec  1 12:33:19 2004
+++ php-src/ext/soap/php_http.c Wed Dec  1 13:22:24 2004
@@ -17,13 +17,13 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_http.c,v 1.55.2.4 2004/12/01 17:33:19 dmitry Exp $ */
+/* $Id: php_http.c,v 1.55.2.5 2004/12/01 18:22:24 dmitry Exp $ */
 
 #include "php_soap.h"
 #include "ext/standard/base64.h"
 
 static char *get_http_header_value(char *headers, char *type);
-static int get_http_body(php_stream *socketd, char *headers,  char **response, 
int *out_size TSRMLS_DC);
+static int get_http_body(php_stream *socketd, int close, char *headers,  char 
**response, int *out_size TSRMLS_DC);
 static int get_http_headers(php_stream *socketd,char **response, int *out_size 
TSRMLS_DC);
 
 #define smart_str_append_const(str, const) \
@@ -204,8 +204,8 @@
        char *http_headers, *http_body, *content_type, *http_version, 
*cookie_itt;
        int http_header_size, http_body_size, http_close;
        char *connection;
-       int http_1_1 = 0;
-       int http_status = 0;
+       int http_1_1;
+       int http_status;
        char *content_encoding;
 
        if (this_ptr == NULL || Z_TYPE_P(this_ptr) != IS_OBJECT) {
@@ -512,16 +512,22 @@
        }
 
        /* Check to see what HTTP status was sent */
+       http_1_1 = 0;
+       http_status = 0;
        http_version = get_http_header_value(http_headers,"HTTP/");
        if (http_version) {
                char *tmp;
 
-               tmp = strstr(http_version," ");
+               if (strncmp(http_version,"1.1", 3)) {
+                       http_1_1 = 1;
+               }
 
+               tmp = strstr(http_version," ");
                if (tmp != NULL) {
                        tmp++;
                        http_status = atoi(tmp);
                }
+               efree(http_version);
 
                /* Process HTTP status codes */
                if (http_status >= 200 && http_status < 300) {
@@ -534,14 +540,13 @@
                          int body_size;
 
                                if (new_url != NULL) {
-                                       if (get_http_body(stream, http_headers, 
&body, &body_size TSRMLS_CC)) {
+                                       if (get_http_body(stream, !http_1_1, 
http_headers, &body, &body_size TSRMLS_CC)) {
                                                efree(body);
                                        } else {
                                                php_stream_close(stream);
                                                
zend_hash_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"));
                                                stream = NULL;
                                        }
-                                       efree(http_version);
                                        efree(http_headers);
                                        efree(loc);
                                        if (new_url->scheme == NULL && 
new_url->path != NULL) {                                         
@@ -596,11 +601,6 @@
                                return FALSE;
                        }
                }
-
-               if (strncmp(http_version,"1.1", 3)) {
-                       http_1_1 = 1;
-               }
-               efree(http_version);
        }
 
        /* Grab and send back every cookie */
@@ -685,7 +685,7 @@
                efree(cookie);
        }
 
-       if (!get_http_body(stream, http_headers, &http_body, &http_body_size 
TSRMLS_CC)) {
+       if (!get_http_body(stream, !http_1_1, http_headers, &http_body, 
&http_body_size TSRMLS_CC)) {
                if (request != buf) {efree(request);}
                php_stream_close(stream);
                efree(http_headers);
@@ -843,19 +843,21 @@
        return NULL;
 }
 
-static int get_http_body(php_stream *stream, char *headers,  char **response, 
int *out_size TSRMLS_DC)
+static int get_http_body(php_stream *stream, int close, char *headers,  char 
**response, int *out_size TSRMLS_DC)
 {
        char *header, *http_buf = NULL;
-       int header_close = 0, header_chunked = 0, header_length = 0, 
http_buf_size = 0;
+       int header_close = close, header_chunked = 0, header_length = 0, 
http_buf_size = 0;
 
-       header = get_http_header_value(headers, "Connection: ");
-       if (header) {
-               if(!strcmp(header, "close")) header_close = 1;
-               efree(header);
+       if (!close) {
+               header = get_http_header_value(headers, "Connection: ");
+               if (header) {
+                       if(!strncmp(header, "close", sizeof("close")-1)) 
header_close = 1;
+                       efree(header);
+               }
        }
        header = get_http_header_value(headers, "Transfer-Encoding: ");
        if (header) {
-               if(!strcmp(header, "chunked")) header_chunked = 1;
+               if(!strncmp(header, "chunked", sizeof("chunked")-1)) 
header_chunked = 1;
                efree(header);
        }
        header = get_http_header_value(headers, "Content-Length: ");

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to