From c72ff03d9ca7ba5ca83e01bebff7fe770ab46411 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Thu, 8 Apr 2021 15:46:18 +0200 Subject: [PATCH] Merge pull request #1298 from ailin-nemui/connect-crashes fix crash on /connect -tls (cherry picked from commit 9b02424f3030362572dfa6acfd8b1ef1ea54cc8a) --- src/core/servers.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/core/servers.c b/src/core/servers.c index 81bdb89e..f58ea0cf 100644 --- a/src/core/servers.c +++ b/src/core/servers.c @@ -206,7 +206,7 @@ static void server_real_connect(SERVER_REC *server, IPADDR *ip, const char *errmsg; char *errmsg2; char ipaddr[MAX_IP_LEN]; - int port; + int port = 0; g_return_if_fail(ip != NULL || unix_socket != NULL); @@ -219,12 +219,22 @@ static void server_real_connect(SERVER_REC *server, IPADDR *ip, own_ip = IPADDR_IS_V6(ip) ? server->connrec->own_ip6 : server->connrec->own_ip4; port = server->connrec->proxy != NULL ? server->connrec->proxy_port : server->connrec->port; - handle = server->connrec->use_tls ? - net_connect_ip_ssl(ip, port, own_ip, server) : net_connect_ip(ip, port, own_ip); + handle = net_connect_ip(ip, port, own_ip); } else { handle = net_connect_unix(unix_socket); } + if (server->connrec->use_tls && handle != NULL) { + server->handle = net_sendbuffer_create(handle, 0); + handle = net_start_ssl(server); + if (handle == NULL) { + net_sendbuffer_destroy(server->handle, TRUE); + server->handle = NULL; + } else { + server->handle->handle = handle; + } + } + if (handle == NULL) { /* failed */ errmsg = g_strerror(errno); @@ -244,7 +254,8 @@ static void server_real_connect(SERVER_REC *server, IPADDR *ip, server_connect_failed(server, errmsg2 ? errmsg2 : errmsg); g_free(errmsg2); } else { - server->handle = net_sendbuffer_create(handle, 0); + if (!server->connrec->use_tls) + server->handle = net_sendbuffer_create(handle, 0); if (server->connrec->use_tls) server_connect_callback_init_ssl(server, handle); else