1
0
mirror of https://github.com/irssi/irssi.git synced 2024-10-27 05:20:20 -04:00

Merge pull request #439 from horgh/ssl-errors

Clear error queue before SSL I/O operations
This commit is contained in:
TheLemonMan 2016-03-17 22:07:57 +01:00 committed by ailin-nemui
parent d20872ac27
commit 7d3fe66e50

View File

@ -289,6 +289,7 @@ static GIOStatus irssi_ssl_read(GIOChannel *handle, gchar *buf, gsize len, gsize
const char *errstr; const char *errstr;
gchar *errmsg; gchar *errmsg;
ERR_clear_error();
ret1 = SSL_read(chan->ssl, buf, len); ret1 = SSL_read(chan->ssl, buf, len);
if(ret1 <= 0) if(ret1 <= 0)
{ {
@ -334,6 +335,7 @@ static GIOStatus irssi_ssl_write(GIOChannel *handle, const gchar *buf, gsize len
const char *errstr; const char *errstr;
gchar *errmsg; gchar *errmsg;
ERR_clear_error();
ret1 = SSL_write(chan->ssl, (const char *)buf, len); ret1 = SSL_write(chan->ssl, (const char *)buf, len);
if(ret1 <= 0) if(ret1 <= 0)
{ {
@ -471,6 +473,7 @@ static GIOChannel *irssi_ssl_get_iochannel(GIOChannel *handle, int port, SERVER_
if(!(fd = g_io_channel_unix_get_fd(handle))) if(!(fd = g_io_channel_unix_get_fd(handle)))
return NULL; return NULL;
ERR_clear_error();
ctx = SSL_CTX_new(SSLv23_client_method()); ctx = SSL_CTX_new(SSLv23_client_method());
if (ctx == NULL) { if (ctx == NULL) {
g_error("Could not allocate memory for SSL context"); g_error("Could not allocate memory for SSL context");
@ -489,6 +492,7 @@ static GIOChannel *irssi_ssl_get_iochannel(GIOChannel *handle, int port, SERVER_
scert = convert_home(mycert); scert = convert_home(mycert);
if (mypkey && *mypkey) if (mypkey && *mypkey)
spkey = convert_home(mypkey); spkey = convert_home(mypkey);
ERR_clear_error();
if (! SSL_CTX_use_certificate_file(ctx, scert, SSL_FILETYPE_PEM)) if (! SSL_CTX_use_certificate_file(ctx, scert, SSL_FILETYPE_PEM))
g_warning("Loading of client certificate '%s' failed: %s", mycert, ERR_reason_error_string(ERR_get_error())); g_warning("Loading of client certificate '%s' failed: %s", mycert, ERR_reason_error_string(ERR_get_error()));
else if (! SSL_CTX_use_PrivateKey_file(ctx, spkey ? spkey : scert, SSL_FILETYPE_PEM)) else if (! SSL_CTX_use_PrivateKey_file(ctx, spkey ? spkey : scert, SSL_FILETYPE_PEM))
@ -581,6 +585,7 @@ int irssi_ssl_handshake(GIOChannel *handle)
X509 *cert; X509 *cert;
const char *errstr; const char *errstr;
ERR_clear_error();
ret = SSL_connect(chan->ssl); ret = SSL_connect(chan->ssl);
if (ret <= 0) { if (ret <= 0) {
err = SSL_get_error(chan->ssl, ret); err = SSL_get_error(chan->ssl, ret);