From 4b76027d5d33d7a78de9ea2f8daf4fb25eb202ef Mon Sep 17 00:00:00 2001 From: Danny Baumann Date: Thu, 4 Dec 2014 13:16:12 +0100 Subject: [PATCH] Don't throw CertificateValidationException for all SSLExceptions. An interrupted connection attempt to the server yields an SSLException as well, like this: E/k9 ( 6937): Caused by: javax.net.ssl.SSLHandshakeException: Connection closed by peer E/k9 ( 6937): at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) E/k9 ( 6937): at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:302) E/k9 ( 6937): at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:598) E/k9 ( 6937): at com.android.org.conscrypt.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:560) E/k9 ( 6937): at com.fsck.k9.mail.store.ImapStore$ImapConnection.open(ImapStore.java:2459) We don't want the user to notify of 'certificate problems' in that case. Fix it by checking whether the SSLException was actually triggered by a CertificateException. --- src/com/fsck/k9/mail/store/ImapStore.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/fsck/k9/mail/store/ImapStore.java b/src/com/fsck/k9/mail/store/ImapStore.java index f2c002e05..94132b5e6 100644 --- a/src/com/fsck/k9/mail/store/ImapStore.java +++ b/src/com/fsck/k9/mail/store/ImapStore.java @@ -26,6 +26,7 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.CodingErrorAction; import java.security.GeneralSecurityException; import java.security.Security; +import java.security.cert.CertificateException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -2644,7 +2645,11 @@ public class ImapStore extends Store { } } catch (SSLException e) { - throw new CertificateValidationException(e.getMessage(), e); + if (e.getCause() instanceof CertificateException) { + throw new CertificateValidationException(e.getMessage(), e); + } else { + throw e; + } } catch (GeneralSecurityException gse) { throw new MessagingException( "Unable to open connection to IMAP server due to security error.", gse);