From afb7b0beb91b86de7a8cc3a1f3783313895507c5 Mon Sep 17 00:00:00 2001 From: markt Date: Mon, 14 Dec 2009 14:53:00 +0000 Subject: [PATCH] Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=47744 Prevent medium term memory leak when ussing SSL with a security manager Based on a patch by Greg Vanore git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@890350 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/tomcat/util/net/jsse/JSSESupport.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/java/org/apache/tomcat/util/net/jsse/JSSESupport.java b/java/org/apache/tomcat/util/net/jsse/JSSESupport.java index 30c72ff9e..8087435bc 100644 --- a/java/org/apache/tomcat/util/net/jsse/JSSESupport.java +++ b/java/org/apache/tomcat/util/net/jsse/JSSESupport.java @@ -23,6 +23,8 @@ import java.io.InputStream; import java.net.SocketException; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; +import java.util.Map; +import java.util.WeakHashMap; import javax.net.ssl.HandshakeCompletedEvent; import javax.net.ssl.HandshakeCompletedListener; @@ -53,6 +55,9 @@ class JSSESupport implements SSLSupport, SSLSessionManager { private static final org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(JSSESupport.class); + + private static final Map keySizeCache = + new WeakHashMap(); protected SSLSocket ssl; protected SSLSession session; @@ -196,7 +201,12 @@ class JSSESupport implements SSLSupport, SSLSessionManager { SSLSupport.CipherData c_aux[]=ciphers; if (session == null) return null; - Integer keySize = (Integer) session.getValue(KEY_SIZE_KEY); + + Integer keySize = null; + synchronized(keySizeCache) { + keySize = keySizeCache.get(session); + } + if (keySize == null) { int size = 0; String cipherSuite = session.getCipherSuite(); @@ -207,7 +217,9 @@ class JSSESupport implements SSLSupport, SSLSessionManager { } } keySize = new Integer(size); - session.putValue(KEY_SIZE_KEY, keySize); + synchronized(keySizeCache) { + keySizeCache.put(session, keySize); + } } return keySize; } -- 2.11.0