Browse Source

- Fixed bug #48590 (SoapClient does not honor max_redirects)

PHP-5.2.1RC1
Sriram Natarajan 17 years ago
parent
commit
bb0b2d9a9b
  1. 1
      NEWS
  2. 21
      ext/soap/php_http.c

1
NEWS

@ -24,6 +24,7 @@ PHP NEWS
(Jani)
- Fixed bug #50394 (Reference argument converted to value in __call). (Stas)
- Fixed bug #49851 (http wrapper breaks on 1024 char long headers). (Ilia)
- Fixed bug #48590 (SoapClient does not honor max_redirects). (Sriram)
- Fixed bug #48190 (Content-type parameter "boundary" is not case-insensitive
in HTTP uploads). (Ilia)
- Fixed bug #47409 (extract() problem with array containing word "this").

21
ext/soap/php_http.c

@ -237,9 +237,11 @@ int make_http_soap_request(zval *this_ptr,
int http_1_1;
int http_status;
int content_type_xml = 0;
long redirect_max = 20;
char *content_encoding;
char *http_msg = NULL;
zend_bool old_allow_url_fopen;
php_stream_context *context = NULL;
if (this_ptr == NULL || Z_TYPE_P(this_ptr) != IS_OBJECT) {
return FALSE;
@ -307,6 +309,19 @@ int make_http_soap_request(zval *this_ptr,
phpurl = php_url_parse(location);
}
if (SUCCESS == zend_hash_find(Z_OBJPROP_P(this_ptr),
"_stream_context", sizeof("_stream_context"), (void**)&tmp)) {
context = php_stream_context_from_zval(*tmp, 0);
}
if (context &&
php_stream_context_get_option(context, "http", "max_redirects", &tmp) == SUCCESS) {
if (Z_TYPE_PP(tmp) != IS_STRING || !is_numeric_string(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &redirect_max, NULL, 1)) {
if (Z_TYPE_PP(tmp) == IS_LONG)
redirect_max = Z_LVAL_PP(tmp);
}
}
try_again:
if (phpurl == NULL || phpurl->host == NULL) {
if (phpurl != NULL) {php_url_free(phpurl);}
@ -953,6 +968,12 @@ try_again:
}
phpurl = new_url;
if (--redirect_max < 1) {
smart_str_free(&soap_headers_z);
add_soap_fault(this_ptr, "HTTP", "Redirection limit reached, aborting", NULL, NULL TSRMLS_CC);
return FALSE;
}
goto try_again;
}
}

Loading…
Cancel
Save