summaryrefslogtreecommitdiff
path: root/ext/soap
diff options
context:
space:
mode:
authorGabríel Arthúr Pétursson <gabriel.arthur.petursson@advania.is>2020-09-16 14:18:00 +0000
committerNikita Popov <nikita.ppv@gmail.com>2020-09-17 10:31:06 +0200
commitefc52f1754524327facffc9f7eea72560e1c03e9 (patch)
tree854b59c5966f51816dc777d8c932644f7bbcd8fa /ext/soap
parenta4f806aa79c9d0e497866e86f750e87d9bd874f1 (diff)
downloadphp-git-efc52f1754524327facffc9f7eea72560e1c03e9.tar.gz
ext/soap: Compare Set-Cookie header case-insensitively
Closes GH-6143.
Diffstat (limited to 'ext/soap')
-rw-r--r--ext/soap/php_http.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c
index b054d9ba9e..75dbdf069e 100644
--- a/ext/soap/php_http.c
+++ b/ext/soap/php_http.c
@@ -23,6 +23,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);
@@ -350,6 +351,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;
@@ -968,8 +970,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;
@@ -981,7 +984,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, ";");
@@ -1039,7 +1042,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);
}
@@ -1357,7 +1360,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;
@@ -1394,7 +1397,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 */
@@ -1408,6 +1413,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;