Author: remm
Date: Tue Mar 15 09:48:47 2016
New Revision: 1735047

URL: http://svn.apache.org/viewvc?rev=1735047&view=rev
Log:
Port 1735044

Modified:
    tomcat/tc8.5.x/trunk/   (props changed)
    
tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java

Propchange: tomcat/tc8.5.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 15 09:48:47 2016
@@ -1 +1 @@
-/tomcat/trunk:1734785,1734799,1734845,1734928,1735041
+/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044

Modified: 
tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java?rev=1735047&r1=1735046&r2=1735047&view=diff
==============================================================================
--- 
tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java 
(original)
+++ 
tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java 
Tue Mar 15 09:48:47 2016
@@ -29,7 +29,6 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.SSLEngineResult;
@@ -65,8 +64,6 @@ public final class OpenSSLEngine extends
     private static final StringManager sm = 
StringManager.getManager(OpenSSLEngine.class);
 
     private static final Certificate[] EMPTY_CERTIFICATES = new Certificate[0];
-    private static final SSLException ENGINE_CLOSED = new 
SSLException(sm.getString("engine.engineClosed"));
-    private static final SSLException ENCRYPTED_PACKET_OVERSIZED = new 
SSLException(sm.getString("engine.oversizedPacket"));
 
     public static final Set<String> AVAILABLE_CIPHER_SUITES;
 
@@ -101,12 +98,6 @@ public final class OpenSSLEngine extends
         AVAILABLE_CIPHER_SUITES = 
Collections.unmodifiableSet(availableCipherSuites);
     }
 
-    static {
-        ENGINE_CLOSED.setStackTrace(new StackTraceElement[0]);
-        ENCRYPTED_PACKET_OVERSIZED.setStackTrace(new StackTraceElement[0]);
-        DESTROYED_UPDATER = 
AtomicIntegerFieldUpdater.newUpdater(OpenSSLEngine.class, "destroyed");
-    }
-
     private static final int MAX_PLAINTEXT_LENGTH = 16 * 1024; // 2^14
     private static final int MAX_COMPRESSED_LENGTH = MAX_PLAINTEXT_LENGTH + 
1024;
     private static final int MAX_CIPHERTEXT_LENGTH = MAX_COMPRESSED_LENGTH + 
1024;
@@ -136,8 +127,6 @@ public final class OpenSSLEngine extends
         REQUIRE,
     }
 
-    private static final AtomicIntegerFieldUpdater<OpenSSLEngine> 
DESTROYED_UPDATER;
-
     private static final String INVALID_CIPHER = "SSL_NULL_WITH_NULL_NULL";
 
     private static final long EMPTY_ADDR = 
Buffer.address(ByteBuffer.allocate(0));
@@ -154,7 +143,7 @@ public final class OpenSSLEngine extends
     private boolean handshakeFinished;
     private int currentHandshake;
     private boolean receivedShutdown;
-    private volatile int destroyed;
+    private volatile boolean destroyed;
 
     // Use an invalid cipherSuite until the handshake is completed
     // See 
http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLEngine.html#getSession()
@@ -197,10 +186,10 @@ public final class OpenSSLEngine extends
             throw new 
IllegalArgumentException(sm.getString("engine.noSSLContext"));
         }
         session = new OpenSSLSession();
-        destroyed = 1;
+        destroyed = true;
         ssl = SSL.newSSL(sslCtx, !clientMode);
         networkBIO = SSL.makeNetworkBIO(ssl);
-        destroyed = 0;
+        destroyed = false;
         this.fallbackApplicationProtocol = fallbackApplicationProtocol;
         this.clientMode = clientMode;
         this.sessionContext = sessionContext;
@@ -216,9 +205,10 @@ public final class OpenSSLEngine extends
      * Destroys this engine.
      */
     public synchronized void shutdown() {
-        if (DESTROYED_UPDATER.compareAndSet(this, 0, 1)) {
-            SSL.freeSSL(ssl);
+        if (!destroyed) {
+            destroyed = true;
             SSL.freeBIO(networkBIO);
+            SSL.freeSSL(ssl);
             ssl = networkBIO = 0;
 
             // internal errors can cause shutdown without marking the engine 
closed
@@ -384,7 +374,7 @@ public final class OpenSSLEngine extends
     public synchronized SSLEngineResult wrap(final ByteBuffer[] srcs, final 
int offset, final int length, final ByteBuffer dst) throws SSLException {
 
         // Check to make sure the engine has not been closed
-        if (destroyed != 0) {
+        if (destroyed) {
             return new SSLEngineResult(SSLEngineResult.Status.CLOSED, 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING, 0, 0);
         }
 
@@ -492,7 +482,7 @@ public final class OpenSSLEngine extends
     @Override
     public synchronized SSLEngineResult unwrap(final ByteBuffer src, final 
ByteBuffer[] dsts, final int offset, final int length) throws SSLException {
         // Check to make sure the engine has not been closed
-        if (destroyed != 0) {
+        if (destroyed) {
             return new SSLEngineResult(SSLEngineResult.Status.CLOSED, 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING, 0, 0);
         }
 
@@ -542,7 +532,7 @@ public final class OpenSSLEngine extends
             isOutboundDone = true;
             engineClosed = true;
             shutdown();
-            throw ENCRYPTED_PACKET_OVERSIZED;
+            throw new SSLException(sm.getString("engine.oversizedPacket"));
         }
 
         // Write encrypted data to network BIO
@@ -673,7 +663,7 @@ public final class OpenSSLEngine extends
         isOutboundDone = true;
         engineClosed = true;
 
-        if (accepted != 0 && destroyed == 0) {
+        if (accepted != 0 && !destroyed) {
             int mode = SSL.getShutdown(ssl);
             if ((mode & SSL.SSL_SENT_SHUTDOWN) != SSL.SSL_SENT_SHUTDOWN) {
                 SSL.shutdownSSL(ssl);
@@ -834,8 +824,8 @@ public final class OpenSSLEngine extends
 
     @Override
     public synchronized void beginHandshake() throws SSLException {
-        if (engineClosed || destroyed != 0) {
-            throw ENGINE_CLOSED;
+        if (engineClosed || destroyed) {
+            throw new SSLException(sm.getString("engine.engineClosed"));
         }
         switch (accepted) {
             case 0:
@@ -860,14 +850,8 @@ public final class OpenSSLEngine extends
     }
 
     private void beginHandshakeImplicitly() throws SSLException {
-        if (engineClosed || destroyed != 0) {
-            throw ENGINE_CLOSED;
-        }
-
-        if (accepted == 0) {
-            handshake();
-            accepted = 1;
-        }
+        handshake();
+        accepted = 1;
     }
 
     private void handshake() throws SSLException {
@@ -930,7 +914,7 @@ public final class OpenSSLEngine extends
 
     @Override
     public synchronized SSLEngineResult.HandshakeStatus getHandshakeStatus() {
-        if (accepted == 0 || destroyed != 0) {
+        if (accepted == 0 || destroyed) {
             return SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING;
         }
 



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

Reply via email to