From 765b03255c65f0ebfd9896c5225a3402d837098a Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Tue, 20 May 2014 13:26:37 +0400 Subject: [PATCH] tls_wrap: do not store TLSCallbacks in SSL_CTX Storing it in SSL_CTX is incorrect as it may go away and get destructed earlier, also it'll yield invalid results in SelectSNIContextCallback. Use `SSL_get_app_data()` instead. fix #7484 Signed-off-by: Timothy J Fontaine --- src/tls_wrap.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc index 99abdf1..2f63dfc 100644 --- a/src/tls_wrap.cc +++ b/src/tls_wrap.cc @@ -180,7 +180,6 @@ void TLSCallbacks::InitSSL() { #ifdef SSL_CTRL_SET_TLSEXT_SERVERNAME_CB if (is_server()) { SSL_CTX_set_tlsext_servername_callback(sc_->ctx_, SelectSNIContextCallback); - SSL_CTX_set_tlsext_servername_arg(sc_->ctx_, this); } #endif // SSL_CTRL_SET_TLSEXT_SERVERNAME_CB @@ -764,7 +763,7 @@ void TLSCallbacks::SetServername(const FunctionCallbackInfo& args) { int TLSCallbacks::SelectSNIContextCallback(SSL* s, int* ad, void* arg) { - TLSCallbacks* p = static_cast(arg); + TLSCallbacks* p = static_cast(SSL_get_app_data(s)); Environment* env = p->env(); const char* servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); -- 2.7.4