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