Make ssl_*_read robust against bogus connection, like ssl_*_write is discord-ssl-crash

Sat, 04 Apr 2020 01:36:20 +0200

author
Samuel Thibault <samuel.thibault@ens-lyon.org>
date
Sat, 04 Apr 2020 01:36:20 +0200
branch
discord-ssl-crash
changeset 40322
3e026e7db681
parent 40239
0a7484792f62
child 40323
0988a438ed3e
child 40324
a86b4b3de249

Make ssl_*_read robust against bogus connection, like ssl_*_write is

libpurple/plugins/ssl/ssl-gnutls.c file | annotate | diff | comparison | revisions
libpurple/plugins/ssl/ssl-nss.c file | annotate | diff | comparison | revisions
--- a/libpurple/plugins/ssl/ssl-gnutls.c	Mon Dec 16 20:20:20 2019 -0600
+++ b/libpurple/plugins/ssl/ssl-gnutls.c	Sat Apr 04 01:36:20 2020 +0200
@@ -451,9 +451,10 @@
 ssl_gnutls_read(PurpleSslConnection *gsc, void *data, size_t len)
 {
 	PurpleSslGnutlsData *gnutls_data = PURPLE_SSL_GNUTLS_DATA(gsc);
-	ssize_t s;
+	ssize_t s = 0;
 
-	s = gnutls_record_recv(gnutls_data->session, data, len);
+	if(gnutls_data)
+		s = gnutls_record_recv(gnutls_data->session, data, len);
 
 	if(s == GNUTLS_E_AGAIN || s == GNUTLS_E_INTERRUPTED) {
 		s = -1;
--- a/libpurple/plugins/ssl/ssl-nss.c	Mon Dec 16 20:20:20 2019 -0600
+++ b/libpurple/plugins/ssl/ssl-nss.c	Sat Apr 04 01:36:20 2020 +0200
@@ -529,6 +529,9 @@
 	PRInt32 ret;
 	PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc);
 
+	if (!nss_data)
+		return 0;
+
 	ret = PR_Read(nss_data->in, data, len);
 
 	if (ret == -1)

mercurial