diff --git a/plugins/http/https.c b/plugins/http/https.c index 4dba1311..a59cc572 100644 --- a/plugins/http/https.c +++ b/plugins/http/https.c @@ -180,9 +180,9 @@ int hr_https_add_vars(struct http_session *hr, struct corerouter_peer *peer, str if (uwsgi_buffer_append_keyval(out, "HTTPS", 5, "on", 2)) return -1; #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME const char *servername = SSL_get_servername(hr->ssl, TLSEXT_NAMETYPE_host_name); - if (servername) { - peer->key = (char *) servername; - peer->key_len = strlen(servername); + if (servername && strlen(servername) <= 0xff) { + peer->key_len = strlen(servername); + memcpy(peer->key, servername, peer->key_len) ; } #endif hr->ssl_client_cert = SSL_get_peer_certificate(hr->ssl); diff --git a/plugins/http/spdy3.c b/plugins/http/spdy3.c index b55df4e2..858a2fcd 100644 --- a/plugins/http/spdy3.c +++ b/plugins/http/spdy3.c @@ -556,8 +556,10 @@ static ssize_t spdy_inflate_http_headers(struct http_session *hr) { } if (!uwsgi_strncmp(cgi_name, nk_len, "HTTP_HOST", 9)) { - new_peer->key = new_peer->out->buf + (new_peer->out->pos - v_len); - new_peer->key_len = v_len; + if (v_len <= 0xff) { + memcpy(new_peer->key, new_peer->out->buf + (new_peer->out->pos - v_len), v_len); + new_peer->key_len = v_len; + } } else if (!uwsgi_strncmp(cgi_name, nk_len, "REQUEST_URI", 11)) { char *path_info = new_peer->out->buf + (new_peer->out->pos - v_len); diff --git a/plugins/sslrouter/sslrouter.c b/plugins/sslrouter/sslrouter.c index 6bb88455..8bfcfdb8 100644 --- a/plugins/sslrouter/sslrouter.c +++ b/plugins/sslrouter/sslrouter.c @@ -288,15 +288,15 @@ static ssize_t sr_read(struct corerouter_peer *main_peer) { // set default peer hook peer->last_hook_read = sr_instance_read; // use the address as hostname - peer->key = cs->ugs->name; + memcpy(peer->key, cs->ugs->name, cs->ugs->name_len); peer->key_len = cs->ugs->name_len; #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME if (usr.sni) { const char *servername = SSL_get_servername(sr->ssl, TLSEXT_NAMETYPE_host_name); - if (servername) { - peer->key = (char *) servername; + if (servername && strlen(servername) <= 0xff) { peer->key_len = strlen(servername); + memcpy(peer->key, servername, peer->key_len); } } #endif