You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/10/16 12:17:51 UTC

svn commit: r1843998 - /tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java

Author: markt
Date: Tue Oct 16 12:17:50 2018
New Revision: 1843998

URL: http://svn.apache.org/viewvc?rev=1843998&view=rev
Log:
Can't use SSL.version() in static initiator for APR as APR/native library isn't always loaded when the Connector is created.

Modified:
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java

Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1843998&r1=1843997&r2=1843998&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Tue Oct 16 12:17:50 2018
@@ -75,19 +75,32 @@ public class AprEndpoint extends Abstrac
 
     private static final Log log = LogFactory.getLog(AprEndpoint.class);
 
-    protected static final Set<String> SSL_PROTO_ALL = new HashSet<String>();
-
-    static {
-        /* Default used if SSLProtocol is not configured, also
-           used if SSLProtocol="All" */
-        SSL_PROTO_ALL.add(Constants.SSL_PROTO_TLSv1);
-        SSL_PROTO_ALL.add(Constants.SSL_PROTO_TLSv1_1);
-        SSL_PROTO_ALL.add(Constants.SSL_PROTO_TLSv1_2);
-        if (SSL.version() >= 0x1010100f) {
-            SSL_PROTO_ALL.add(Constants.SSL_PROTO_TLSv1_3);
+    // Lazy init as we need the AprLifecycleListener to have loaded the
+    // APR/native library to populate this correctly.
+    private static volatile Set<String> SSL_PROTO_ALL;
+    private static final Object SSL_PROTO_ALL_LOCK = new Object();
+
+    protected static Set<String> getSslProtocolAll() {
+        if (SSL_PROTO_ALL == null) {
+            synchronized (SSL_PROTO_ALL_LOCK) {
+                if (SSL_PROTO_ALL == null) {
+                    Set<String> temp = new HashSet<String>();
+                    /* Default used if SSLProtocol is not configured, also
+                    used if SSLProtocol="All" */
+                    temp.add(Constants.SSL_PROTO_TLSv1);
+                    temp.add(Constants.SSL_PROTO_TLSv1_1);
+                    temp.add(Constants.SSL_PROTO_TLSv1_2);
+                    if (SSL.version() >= 0x1010100f) {
+                        temp.add(Constants.SSL_PROTO_TLSv1_3);
+                    }
+                    SSL_PROTO_ALL = temp;
+                }
+            }
         }
+        return SSL_PROTO_ALL;
     }
 
+
     // ----------------------------------------------------------------- Fields
     /**
      * Root APR memory pool.
@@ -547,7 +560,7 @@ public class AprEndpoint extends Abstrac
                         if (trimmed.charAt(0) == '-') {
                             trimmed = trimmed.substring(1).trim();
                             if (trimmed.equalsIgnoreCase(Constants.SSL_PROTO_ALL)) {
-                                protocols.removeAll(SSL_PROTO_ALL);
+                                protocols.removeAll(getSslProtocolAll());
                             } else {
                                 protocols.remove(trimmed);
                             }
@@ -556,7 +569,7 @@ public class AprEndpoint extends Abstrac
                                 trimmed = trimmed.substring(1).trim();
                             }
                             if (trimmed.equalsIgnoreCase(Constants.SSL_PROTO_ALL)) {
-                                protocols.addAll(SSL_PROTO_ALL);
+                                protocols.addAll(getSslProtocolAll());
                             } else {
                                 protocols.add(trimmed);
                             }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org