com php-src: Fix segfault accessing context when no context assigned: ext/openssl/xp_ssl.c
| From: | rdlowrey@php.net | Date: | Fri, 14 Feb 2014 17:24:08 +0000 |
| Subject: | com php-src: Fix segfault accessing context when no context assigned: ext/openssl/xp_ssl.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-75977@lists.php.net to get a copy of this message | ||
Commit: 8582353700f01a9004efe422eabb1926ed7a4dce
Author: Daniel Lowrey <rdlowrey@php.net> Fri, 14 Feb 2014 10:20:44 -0700
Parents: a7ec000f3526076fce684557bee0324a3f8b70ad
Branches: PHP-5.6
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=8582353700f01a9004efe422eabb1926ed7a4dce
Log:
Fix segfault accessing context when no context assigned
Changed paths:
M ext/openssl/xp_ssl.c
Diff:
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index 523062e..198dda3 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -452,10 +452,7 @@ static inline int php_openssl_setup_crypto(php_stream *stream,
}
-static inline int php_openssl_enable_crypto(php_stream *stream,
- php_openssl_netstream_data_t *sslsock,
- php_stream_xport_crypto_param *cparam
- TSRMLS_DC)
+static inline int php_openssl_enable_crypto(php_stream *stream, php_openssl_netstream_data_t
*sslsock, php_stream_xport_crypto_param *cparam TSRMLS_DC)
{
int n, retry = 1;
@@ -466,11 +463,12 @@ static inline int php_openssl_enable_crypto(php_stream *stream,
has_timeout = 0;
#if OPENSSL_VERSION_NUMBER >= 0x00908070L && !defined(OPENSSL_NO_TLSEXT)
-
+{
zval **val;
- if (sslsock->is_client
- && (php_stream_context_get_option(stream->context, "ssl",
"SNI_enabled", &val) == FAILURE
+ if (sslsock->is_client &&
+ stream->context &&
+ (php_stream_context_get_option(stream->context, "ssl", "SNI_enabled",
&val) == FAILURE
|| zend_is_true(*val))
) {
if (php_stream_context_get_option(stream->context, "ssl",
"SNI_server_name", &val) == SUCCESS) {
@@ -479,10 +477,13 @@ static inline int php_openssl_enable_crypto(php_stream *stream,
} else if (sslsock->url_name) {
SSL_set_tlsext_host_name(sslsock->ssl_handle, sslsock->url_name);
}
+
+ } else if (sslsock->is_client && !stream->context && sslsock->url_name)
{
+ SSL_set_tlsext_host_name(sslsock->ssl_handle, sslsock->url_name);
}
+}
#endif
-
if (!sslsock->state_set) {
if (sslsock->is_client) {
SSL_set_connect_state(sslsock->ssl_handle);