Author: trustin
Date: Sun Jul 29 20:31:32 2007
New Revision: 560851

URL: http://svn.apache.org/viewvc?view=rev&rev=560851
Log:
Fixed StackOverflowError in SSLHandler 


Modified:
    
mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
    
mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
    mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java

Modified: 
mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java?view=diff&rev=560851&r1=560850&r2=560851
==============================================================================
--- 
mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
 (original)
+++ 
mina/branches/1.0/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
 Sun Jul 29 20:31:32 2007
@@ -438,7 +438,7 @@
      * @param status
      * @throws SSLException
      */
-    private void checkStatus(NextFilter nextFilter, SSLEngineResult res)
+    private void checkStatus(SSLEngineResult res)
             throws SSLException {
         
         SSLEngineResult.Status status = res.getStatus();
@@ -458,12 +458,6 @@
                     + " inNetBuffer: " + inNetBuffer + "appBuffer: "
                     + appBuffer);
         }
-
-        if (res.getHandshakeStatus() != 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
-            // Renegotiation required.
-            SessionLog.debug(session, " Renegotiating...");
-            handshake(nextFilter);
-        }
     }
 
     /**
@@ -619,7 +613,14 @@
         // prepare app data to be read
         appBuffer.flip();
         
-        checkStatus(nextFilter, res);
+        checkStatus(res);
+        
+
+        if (res.getHandshakeStatus() != 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+            // Renegotiation required.
+            SessionLog.debug(session, " Renegotiating...");
+            handshake(nextFilter);
+        }
     }
 
     private SSLEngineResult.Status unwrapHandshake(NextFilter nextFilter) 
throws SSLException {
@@ -635,6 +636,8 @@
         SSLEngineResult res = unwrap0();
         initialHandshakeStatus = res.getHandshakeStatus();
 
+        checkStatus(res);
+
         // If handshake finished, no data was produced, and the status is 
still ok,
         // try to unwrap more
         if (initialHandshakeStatus == SSLEngineResult.HandshakeStatus.FINISHED
@@ -642,15 +645,26 @@
                 && res.getStatus() == SSLEngineResult.Status.OK
                 && inNetBuffer.hasRemaining()) {
             res = unwrap0();
-        }
-
-        // prepare to be written again
-        inNetBuffer.compact();
+            
+            // prepare to be written again
+            inNetBuffer.compact();
+
+            // prepare app data to be read
+            appBuffer.flip();
+
+            if (res.getHandshakeStatus() != 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+                // Renegotiation required.
+                SessionLog.debug(session, " Renegotiating...");
+                handshake(nextFilter);
+            }
+        } else {
+            // prepare to be written again
+            inNetBuffer.compact();
 
-        // prepare app data to be read
-        appBuffer.flip();
+            // prepare app data to be read
+            appBuffer.flip();
+        }
 
-        checkStatus(nextFilter, res);
         return res.getStatus();
     }
 

Modified: 
mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java?view=diff&rev=560851&r1=560850&r2=560851
==============================================================================
--- 
mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
 (original)
+++ 
mina/branches/1.1/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
 Sun Jul 29 20:31:32 2007
@@ -435,7 +435,7 @@
      * @param status
      * @throws SSLException
      */
-    private void checkStatus(NextFilter nextFilter, SSLEngineResult res)
+    private void checkStatus(SSLEngineResult res)
             throws SSLException {
         
         SSLEngineResult.Status status = res.getStatus();
@@ -455,12 +455,6 @@
                     + " inNetBuffer: " + inNetBuffer + "appBuffer: "
                     + appBuffer);
         }
-
-        if (res.getHandshakeStatus() != 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
-            // Renegotiation required.
-            SessionLog.debug(session, " Renegotiating...");
-            handshake(nextFilter);
-        }
     }
 
     /**
@@ -611,7 +605,14 @@
         // prepare app data to be read
         appBuffer.flip();
         
-        checkStatus(nextFilter, res);
+        checkStatus(res);
+        
+
+        if (res.getHandshakeStatus() != 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+            // Renegotiation required.
+            SessionLog.debug(session, " Renegotiating...");
+            handshake(nextFilter);
+        }
     }
 
     private SSLEngineResult.Status unwrapHandshake(NextFilter nextFilter) 
throws SSLException {
@@ -627,6 +628,8 @@
         SSLEngineResult res = unwrap0();
         initialHandshakeStatus = res.getHandshakeStatus();
 
+        checkStatus(res);
+
         // If handshake finished, no data was produced, and the status is 
still ok,
         // try to unwrap more
         if (initialHandshakeStatus == SSLEngineResult.HandshakeStatus.FINISHED
@@ -634,15 +637,26 @@
                 && res.getStatus() == SSLEngineResult.Status.OK
                 && inNetBuffer.hasRemaining()) {
             res = unwrap0();
-        }
-
-        // prepare to be written again
-        inNetBuffer.compact();
+            
+            // prepare to be written again
+            inNetBuffer.compact();
+
+            // prepare app data to be read
+            appBuffer.flip();
+
+            if (res.getHandshakeStatus() != 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+                // Renegotiation required.
+                SessionLog.debug(session, " Renegotiating...");
+                handshake(nextFilter);
+            }
+        } else {
+            // prepare to be written again
+            inNetBuffer.compact();
 
-        // prepare app data to be read
-        appBuffer.flip();
+            // prepare app data to be read
+            appBuffer.flip();
+        }
 
-        checkStatus(nextFilter, res);
         return res.getStatus();
     }
 

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java?view=diff&rev=560851&r1=560850&r2=560851
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java 
(original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SSLHandler.java 
Sun Jul 29 20:31:32 2007
@@ -441,7 +441,7 @@
      * @param status
      * @throws SSLException
      */
-    private void checkStatus(NextFilter nextFilter, SSLEngineResult res)
+    private void checkStatus(SSLEngineResult res)
             throws SSLException {
         
         SSLEngineResult.Status status = res.getStatus();
@@ -461,12 +461,6 @@
                     + " inNetBuffer: " + inNetBuffer + "appBuffer: "
                     + appBuffer);
         }
-
-        if (res.getHandshakeStatus() != 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
-            // Renegotiation required.
-            SessionLog.debug(session, " Renegotiating...");
-            handshake(nextFilter);
-        }
     }
 
     /**
@@ -621,7 +615,14 @@
         // prepare app data to be read
         appBuffer.flip();
         
-        checkStatus(nextFilter, res);
+        checkStatus(res);
+        
+
+        if (res.getHandshakeStatus() != 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+            // Renegotiation required.
+            SessionLog.debug(session, " Renegotiating...");
+            handshake(nextFilter);
+        }
     }
 
     private SSLEngineResult.Status unwrapHandshake(NextFilter nextFilter) 
throws SSLException {
@@ -637,6 +638,8 @@
         SSLEngineResult res = unwrap0();
         initialHandshakeStatus = res.getHandshakeStatus();
 
+        checkStatus(res);
+
         // If handshake finished, no data was produced, and the status is 
still ok,
         // try to unwrap more
         if (initialHandshakeStatus == SSLEngineResult.HandshakeStatus.FINISHED
@@ -644,15 +647,26 @@
                 && res.getStatus() == SSLEngineResult.Status.OK
                 && inNetBuffer.hasRemaining()) {
             res = unwrap0();
-        }
-
-        // prepare to be written again
-        inNetBuffer.compact();
+            
+            // prepare to be written again
+            inNetBuffer.compact();
+
+            // prepare app data to be read
+            appBuffer.flip();
+
+            if (res.getHandshakeStatus() != 
SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
+                // Renegotiation required.
+                SessionLog.debug(session, " Renegotiating...");
+                handshake(nextFilter);
+            }
+        } else {
+            // prepare to be written again
+            inNetBuffer.compact();
 
-        // prepare app data to be read
-        appBuffer.flip();
+            // prepare app data to be read
+            appBuffer.flip();
+        }
 
-        checkStatus(nextFilter, res);
         return res.getStatus();
     }
 


Reply via email to