Skip to content

Commit

Permalink
Merge branch 'PHP-7.1'
Browse files Browse the repository at this point in the history
Also inline alpn_ctx in openssl_netstream_data (no need for the extra allocation there)
  • Loading branch information
bwoebi committed Dec 22, 2016
2 parents 712c532 + 7b133e0 commit 1f474fd
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions ext/openssl/xp_ssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ typedef struct _php_openssl_netstream_data_t {
php_openssl_sni_cert_t *sni_certs;
unsigned sni_cert_count;
#ifdef HAVE_TLS_ALPN
php_openssl_alpn_ctx *alpn_ctx;
php_openssl_alpn_ctx alpn_ctx;
#endif
char *url_name;
unsigned state_set:1;
Expand Down Expand Up @@ -1453,9 +1453,7 @@ static int server_alpn_callback(SSL *ssl_handle, const unsigned char **out, unsi
{
php_openssl_netstream_data_t *sslsock = arg;

if (SSL_select_next_proto
((unsigned char **)out, outlen, sslsock->alpn_ctx->data, sslsock->alpn_ctx->len, in,
inlen) != OPENSSL_NPN_NEGOTIATED) {
if (SSL_select_next_proto((unsigned char **)out, outlen, sslsock->alpn_ctx.data, sslsock->alpn_ctx.len, in, inlen) != OPENSSL_NPN_NEGOTIATED) {
return SSL_TLSEXT_ERR_NOACK;
}

Expand Down Expand Up @@ -1564,9 +1562,8 @@ int php_openssl_setup_crypto(php_stream *stream,
if (sslsock->is_client) {
SSL_CTX_set_alpn_protos(sslsock->ctx, alpn, alpn_len);
} else {
sslsock->alpn_ctx = (php_openssl_alpn_ctx *) emalloc(sizeof(php_openssl_alpn_ctx));
sslsock->alpn_ctx->data = (unsigned char*)estrndup((const char*)alpn, alpn_len);
sslsock->alpn_ctx->len = alpn_len;
sslsock->alpn_ctx.data = (unsigned char *) pestrndup((const char*)alpn, alpn_len, php_stream_is_persistent(stream));
sslsock->alpn_ctx.len = alpn_len;
SSL_CTX_set_alpn_select_cb(sslsock->ctx, server_alpn_callback, sslsock);
}

Expand Down Expand Up @@ -1597,6 +1594,12 @@ int php_openssl_setup_crypto(php_stream *stream,
php_error_docref(NULL, E_WARNING, "SSL handle creation failure");
SSL_CTX_free(sslsock->ctx);
sslsock->ctx = NULL;
#ifdef HAVE_TLS_ALPN
if (sslsock->alpn_ctx.data) {
pefree(sslsock->alpn_ctx.data, php_stream_is_persistent(stream));
sslsock->alpn_ctx.data = NULL;
}
#endif
return FAILURE;
} else {
SSL_set_ex_data(sslsock->ssl_handle, php_openssl_get_ssl_stream_data_index(), stream);
Expand Down Expand Up @@ -2098,6 +2101,11 @@ static int php_openssl_sockop_close(php_stream *stream, int close_handle) /* {{{
SSL_CTX_free(sslsock->ctx);
sslsock->ctx = NULL;
}
#ifdef HAVE_TLS_ALPN
if (sslsock->alpn_ctx.data) {
pefree(sslsock->alpn_ctx.data, php_stream_is_persistent(stream));
}
#endif
#ifdef PHP_WIN32
if (sslsock->s.socket == -1)
sslsock->s.socket = SOCK_ERR;
Expand Down

0 comments on commit 1f474fd

Please sign in to comment.