diff options
author | Kenny Root <kroot@google.com> | 2013-09-10 18:50:15 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2013-09-10 18:50:15 +0000 |
commit | 0d819a82fbf9b719e5892ad1e3163518705e3eb1 (patch) | |
tree | f8d573523e48f601ada6be452139736b70a7902c | |
parent | 27bfb68a2246394b504660182c228bfca2e38cdf (diff) | |
parent | 16cdc260a805bcbec56a4f9a704e36fa924617ce (diff) | |
download | libcore-0d819a82fbf9b719e5892ad1e3163518705e3eb1.zip libcore-0d819a82fbf9b719e5892ad1e3163518705e3eb1.tar.gz libcore-0d819a82fbf9b719e5892ad1e3163518705e3eb1.tar.bz2 |
Merge "Delay SSLSocketImpl instantiation until needed"
5 files changed, 29 insertions, 15 deletions
diff --git a/crypto/src/main/java/org/conscrypt/OpenSSLSocketImpl.java b/crypto/src/main/java/org/conscrypt/OpenSSLSocketImpl.java index f8a4a98..0caeff3 100644 --- a/crypto/src/main/java/org/conscrypt/OpenSSLSocketImpl.java +++ b/crypto/src/main/java/org/conscrypt/OpenSSLSocketImpl.java @@ -742,7 +742,7 @@ public class OpenSSLSocketImpl } catch (IOException e) { // return an invalid session with // invalid cipher suite of "SSL_NULL_WITH_NULL_NULL" - return SSLSessionImpl.NULL_SESSION; + return SSLSessionImpl.getNullSession(); } } return sslSession; diff --git a/crypto/src/main/java/org/conscrypt/SSLEngineImpl.java b/crypto/src/main/java/org/conscrypt/SSLEngineImpl.java index 0be367d..3ed9980 100644 --- a/crypto/src/main/java/org/conscrypt/SSLEngineImpl.java +++ b/crypto/src/main/java/org/conscrypt/SSLEngineImpl.java @@ -369,7 +369,7 @@ public class SSLEngineImpl extends SSLEngine { if (session != null) { return session; } - return SSLSessionImpl.NULL_SESSION; + return SSLSessionImpl.getNullSession(); } /** diff --git a/crypto/src/main/java/org/conscrypt/SSLSessionImpl.java b/crypto/src/main/java/org/conscrypt/SSLSessionImpl.java index 4014a28..9631b1e 100644 --- a/crypto/src/main/java/org/conscrypt/SSLSessionImpl.java +++ b/crypto/src/main/java/org/conscrypt/SSLSessionImpl.java @@ -33,8 +33,13 @@ import org.conscrypt.util.EmptyArray; public final class SSLSessionImpl implements SSLSession, Cloneable { - /** Session object reporting an invalid cipher suite of "SSL_NULL_WITH_NULL_NULL" */ - public static final SSLSessionImpl NULL_SESSION = new SSLSessionImpl(null); + /* + * Holds default instances so class preloading doesn't create an instance of + * it. + */ + private static class DefaultHolder { + public static final SSLSessionImpl NULL_SESSION = new SSLSessionImpl(null); + } private long creationTime; private boolean isValid = true; @@ -54,6 +59,10 @@ public final class SSLSessionImpl implements SSLSession, Cloneable { byte[] serverRandom; final boolean isServer; + public static SSLSessionImpl getNullSession() { + return DefaultHolder.NULL_SESSION; + } + public SSLSessionImpl(CipherSuite cipher_suite, SecureRandom secureRandom) { creationTime = System.currentTimeMillis(); lastAccessedTime = creationTime; diff --git a/crypto/src/main/java/org/conscrypt/SSLSocketImpl.java b/crypto/src/main/java/org/conscrypt/SSLSocketImpl.java index b727873..138a143 100644 --- a/crypto/src/main/java/org/conscrypt/SSLSocketImpl.java +++ b/crypto/src/main/java/org/conscrypt/SSLSocketImpl.java @@ -391,7 +391,7 @@ public class SSLSocketImpl extends SSLSocket { } catch (IOException e) { // return an invalid session with // invalid cipher suite of "SSL_NULL_WITH_NULL_NULL" - return SSLSessionImpl.NULL_SESSION; + return SSLSessionImpl.getNullSession(); } } return session; diff --git a/luni/src/main/java/javax/net/ssl/HttpsURLConnection.java b/luni/src/main/java/javax/net/ssl/HttpsURLConnection.java index 9803f3d..ab86a9b 100644 --- a/luni/src/main/java/javax/net/ssl/HttpsURLConnection.java +++ b/luni/src/main/java/javax/net/ssl/HttpsURLConnection.java @@ -104,11 +104,16 @@ import java.security.cert.X509Certificate; * connection will be retried with SSLv3 only. */ public abstract class HttpsURLConnection extends HttpURLConnection { + /* + * Holds default instances so class preloading doesn't create an instance of + * it. + */ + private static class NoPreloadHolder { + public static HostnameVerifier defaultHostnameVerifier = new DefaultHostnameVerifier(); - private static HostnameVerifier defaultHostnameVerifier = new DefaultHostnameVerifier(); - - private static SSLSocketFactory defaultSSLSocketFactory = (SSLSocketFactory) SSLSocketFactory - .getDefault(); + public static SSLSocketFactory defaultSSLSocketFactory = (SSLSocketFactory) SSLSocketFactory + .getDefault(); + } /** * Sets the default hostname verifier to be used by new instances. @@ -122,7 +127,7 @@ public abstract class HttpsURLConnection extends HttpURLConnection { if (v == null) { throw new IllegalArgumentException("HostnameVerifier is null"); } - defaultHostnameVerifier = v; + NoPreloadHolder.defaultHostnameVerifier = v; } /** @@ -131,7 +136,7 @@ public abstract class HttpsURLConnection extends HttpURLConnection { * @return the default hostname verifier. */ public static HostnameVerifier getDefaultHostnameVerifier() { - return defaultHostnameVerifier; + return NoPreloadHolder.defaultHostnameVerifier; } /** @@ -146,7 +151,7 @@ public abstract class HttpsURLConnection extends HttpURLConnection { if (sf == null) { throw new IllegalArgumentException("SSLSocketFactory is null"); } - defaultSSLSocketFactory = sf; + NoPreloadHolder.defaultSSLSocketFactory = sf; } /** @@ -155,7 +160,7 @@ public abstract class HttpsURLConnection extends HttpURLConnection { * @return the default SSL socket factory for new instances. */ public static SSLSocketFactory getDefaultSSLSocketFactory() { - return defaultSSLSocketFactory; + return NoPreloadHolder.defaultSSLSocketFactory; } /** @@ -176,8 +181,8 @@ public abstract class HttpsURLConnection extends HttpURLConnection { */ protected HttpsURLConnection(URL url) { super(url); - hostnameVerifier = defaultHostnameVerifier; - sslSocketFactory = defaultSSLSocketFactory; + hostnameVerifier = NoPreloadHolder.defaultHostnameVerifier; + sslSocketFactory = NoPreloadHolder.defaultSSLSocketFactory; } /** |