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:33:43 +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-75979@lists.php.net to get a copy of this message | ||
Commit: 4921c1f0ce17560e9946d34d660829934be00020
Author: Daniel Lowrey <rdlowrey@php.net> Fri, 14 Feb 2014 10:20:44 -0700
Parents: 059c0a9eb97851f37223ee6914c61d293b538e29
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=4921c1f0ce17560e9946d34d660829934be00020
Log:
Fix segfault accessing context when no context assigned
Conflicts:
ext/openssl/xp_ssl.c
Changed paths:
M ext/openssl/xp_ssl.c
Diff:
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index a02d4f9..6f4b630 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 TSRMLS_CC))
) {
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);