From e2dfd6d165958e9136a0af75f6fef250bfaee617 Mon Sep 17 00:00:00 2001 From: dequis Date: Sat, 27 Jun 2015 12:22:09 -0300 Subject: [PATCH] irssiproxy: use a single goto for error handling in add_listen() --- src/irc/proxy/listen.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/irc/proxy/listen.c b/src/irc/proxy/listen.c index 72d2a0dd..519666bd 100644 --- a/src/irc/proxy/listen.c +++ b/src/irc/proxy/listen.c @@ -654,33 +654,22 @@ static void add_listen(const char *ircnet, int port, char *sslcert) printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Proxy: Error setting up SSL Context for port %d failed.", rec->port); - g_free(rec->ircnet); - g_free(rec); - return; + goto error; } if(SSL_CTX_use_certificate_file(rec->ssl_ctx, sslcert, SSL_FILETYPE_PEM) <= 0) { printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Proxy: Error loading certificate."); - SSL_CTX_free(rec->ssl_ctx); - g_free(rec->ircnet); - g_free(rec); - return; + goto error; } if(SSL_CTX_use_PrivateKey_file(rec->ssl_ctx, sslcert, SSL_FILETYPE_PEM) <= 0) { printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Proxy: Error loading private key."); - SSL_CTX_free(rec->ssl_ctx); - g_free(rec->ircnet); - g_free(rec); - return; + goto error; } if(!SSL_CTX_check_private_key(rec->ssl_ctx)) { printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Proxy: Error loading checking certificate agains private key."); - SSL_CTX_free(rec->ssl_ctx); - g_free(rec->ircnet); - g_free(rec); - return; + goto error; } } @@ -688,6 +677,14 @@ static void add_listen(const char *ircnet, int port, char *sslcert) (GInputFunction) sig_listen, rec); proxy_listens = g_slist_append(proxy_listens, rec); + + return; +error: + if (rec->ssl_ctx != NULL) { + SSL_CTX_free(rec->ssl_ctx); + } + g_free(rec->ircnet); + g_free(rec); } static void remove_listen(LISTEN_REC *rec)