diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-17 10:31:48 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-17 10:31:48 +0200 |
commit | e55a6581151a145c47bf7ad482469f2c67a9b62c (patch) | |
tree | 7dd1f18a67f4ad7e0521d30565a8225adcd3b762 /ext/soap | |
parent | 801cf66ab881aa7dc10a4dfc11bd78517b5ca005 (diff) | |
parent | f0d2efbadcab95596679e2f78e204299c96ad9b4 (diff) | |
download | php-git-e55a6581151a145c47bf7ad482469f2c67a9b62c.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
ext/soap: Compare Set-Cookie header case-insensitively
Diffstat (limited to 'ext/soap')
-rw-r--r-- | ext/soap/php_http.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c index 03fcc46776..1da286ad87 100644 --- a/ext/soap/php_http.c +++ b/ext/soap/php_http.c @@ -21,6 +21,7 @@ #include "ext/standard/md5.h" #include "ext/standard/php_random.h" +static char *get_http_header_value_nodup(char *headers, char *type, size_t *len); static char *get_http_header_value(char *headers, char *type); static zend_string *get_http_body(php_stream *socketd, int close, char *headers); static zend_string *get_http_headers(php_stream *socketd); @@ -348,6 +349,7 @@ int make_http_soap_request(zval *this_ptr, int use_ssl; zend_string *http_body; char *content_type, *http_version, *cookie_itt; + size_t cookie_len; int http_close; zend_string *http_headers; char *connection; @@ -958,8 +960,9 @@ try_again: we shouldn't be changing urls so path doesn't matter too much */ - cookie_itt = strstr(ZSTR_VAL(http_headers), "Set-Cookie: "); - while (cookie_itt) { + cookie_itt = ZSTR_VAL(http_headers); + + while ((cookie_itt = get_http_header_value_nodup(cookie_itt, "Set-Cookie: ", &cookie_len))) { char *cookie; char *eqpos, *sempos; zval *cookies; @@ -971,7 +974,7 @@ try_again: cookies = zend_hash_str_update(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies")-1, &tmp_cookies); } - cookie = get_http_header_value(cookie_itt,"Set-Cookie: "); + cookie = estrndup(cookie_itt, cookie_len); eqpos = strstr(cookie, "="); sempos = strstr(cookie, ";"); @@ -1029,7 +1032,7 @@ try_again: smart_str_free(&name); } - cookie_itt = strstr(cookie_itt + sizeof("Set-Cookie: "), "Set-Cookie: "); + cookie_itt = cookie_itt + cookie_len; efree(cookie); } @@ -1347,7 +1350,7 @@ try_again: return TRUE; } -static char *get_http_header_value(char *headers, char *type) +static char *get_http_header_value_nodup(char *headers, char *type, size_t *len) { char *pos, *tmp = NULL; int typelen, headerslen; @@ -1384,7 +1387,9 @@ static char *get_http_header_value(char *headers, char *type) eol--; } } - return estrndup(tmp, eol - tmp); + + *len = eol - tmp; + return tmp; } /* find next line */ @@ -1398,6 +1403,20 @@ static char *get_http_header_value(char *headers, char *type) return NULL; } +static char *get_http_header_value(char *headers, char *type) +{ + size_t len; + char *value; + + value = get_http_header_value_nodup(headers, type, &len); + + if (value) { + return estrndup(value, len); + } + + return NULL; +} + static zend_string* get_http_body(php_stream *stream, int close, char *headers) { zend_string *http_buf = NULL; |