Blob Blame History Raw
diff -Naur claws-mail-3.17.3-orig/src/gtk/sslcertwindow.c claws-mail-3.17.3/src/gtk/sslcertwindow.c
--- claws-mail-3.17.3-orig/src/gtk/sslcertwindow.c	2018-11-07 11:31:50.000000000 +0100
+++ claws-mail-3.17.3/src/gtk/sslcertwindow.c	2019-04-20 11:01:10.004193095 +0200
@@ -70,6 +70,7 @@
 	char *tmp;
 	time_t exp_time_t;
 	struct tm lt;
+	guint ret;
 
 	/* issuer */	
 	issuer_commonname = g_malloc(BUFFSIZE);
@@ -142,13 +143,27 @@
 	} else
 		exp_date = g_strdup("");
 
-	/* fingerprint */
-	n = 128;
-	gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA1, md, &n);
-	sha1_fingerprint = readable_fingerprint(md, (int)n);
-	gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA256, md, &n);
-	sha256_fingerprint = readable_fingerprint(md, (int)n);
+	/* fingerprints */
+	n = 0;
+	memset(md, 0, sizeof(md));
+	if ((ret = gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA1, md, &n)) == GNUTLS_E_SHORT_MEMORY_BUFFER) {
+			if (n <= sizeof(md))
+					ret = gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA1, md, &n);
+	}
+	if (ret != 0)
+			g_warning("failed to obtain SHA1 fingerprint: %d", ret);
+	sha1_fingerprint = readable_fingerprint(md, (int)n); /* all zeroes */
+
+	n = 0;
+	memset(md, 0, sizeof(md));
+	if ((ret = gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA256, md, &n)) == GNUTLS_E_SHORT_MEMORY_BUFFER) {
+			if (n <= sizeof(md))
+					ret = gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA256, md, &n);
+	}
 
+	if (ret != 0)
+			g_warning("failed to obtain SHA256 fingerprint: %d", ret);
+	sha256_fingerprint = readable_fingerprint(md, (int)n); /* all zeroes */
 
 	/* signature */
 	sig_status = ssl_certificate_check_signer(cert, cert->status);