aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2013-07-23 20:23:07 -0700
committerThe Android Automerger <android-build@android.com>2013-08-13 15:22:21 -0700
commit9c3ab9da1444ba10f83a0f4855a17e660d732800 (patch)
treecaec66950c59c37e4e2c36d27ee8fef8a81bb1e0
parent339f18ff18ea0c13fae1d6750ffe8eaf847e62e9 (diff)
downloadlibcore-jb-mr2-release.tar.gz
Delay SSLSocketImpl instantiation until needed DO NOT MERGEandroid-4.3_r1.1jb-mr2-release
Class preloading will create an instance of objects if they are in static fields, so put the ones we don't want instantiated into a holder class that is not preloaded. (cherry picked from commit da5b7116b58795b169961cbd63c2b21bac741d9a) Bug: 9984058 Change-Id: Ifbf7b7a3668f19ca21fa66a486ae557086a195b5
-rw-r--r--luni/src/main/java/javax/net/ssl/HttpsURLConnection.java25
-rw-r--r--luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSocketImpl.java2
-rw-r--r--luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLEngineImpl.java2
-rw-r--r--luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java13
-rw-r--r--luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSocketImpl.java2
5 files changed, 29 insertions, 15 deletions
diff --git a/luni/src/main/java/javax/net/ssl/HttpsURLConnection.java b/luni/src/main/java/javax/net/ssl/HttpsURLConnection.java
index 9803f3d4da9..ab86a9b7811 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;
}
/**
diff --git a/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSocketImpl.java b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSocketImpl.java
index ced6310e18b..ea56afb150b 100644
--- a/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSocketImpl.java
+++ b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSocketImpl.java
@@ -726,7 +726,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/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLEngineImpl.java b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLEngineImpl.java
index af033258388..7f01c8a3c57 100644
--- a/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLEngineImpl.java
+++ b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLEngineImpl.java
@@ -370,7 +370,7 @@ public class SSLEngineImpl extends SSLEngine {
if (session != null) {
return session;
}
- return SSLSessionImpl.NULL_SESSION;
+ return SSLSessionImpl.getNullSession();
}
/**
diff --git a/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java
index 247c6eec08d..46834adf778 100644
--- a/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java
+++ b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java
@@ -33,8 +33,13 @@ import libcore.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/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSocketImpl.java b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSocketImpl.java
index 2cd2cf5693d..3e72aeba425 100644
--- a/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSocketImpl.java
+++ b/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/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;