You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2008/05/20 03:53:17 UTC

svn commit: r658082 - in /mina/branches: 1.0/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java 1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java

Author: trustin
Date: Mon May 19 18:53:17 2008
New Revision: 658082

URL: http://svn.apache.org/viewvc?rev=658082&view=rev
Log:
Made sure ProtocolCodecFilter doesn't forward an empty buffer to decoders


Modified:
    mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=658082&r1=658081&r2=658082&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Mon May 19 18:53:17 2008
@@ -6,16 +6,16 @@
  *  to you under the Apache License, Version 2.0 (the
  *  "License"); you may not use this file except in compliance
  *  with the License.  You may obtain a copy of the License at
- *  
+ *
  *    http://www.apache.org/licenses/LICENSE-2.0
- *  
+ *
  *  Unless required by applicable law or agreed to in writing,
  *  software distributed under the License is distributed on an
  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  *  KIND, either express or implied.  See the License for the
  *  specific language governing permissions and limitations
- *  under the License. 
- *  
+ *  under the License.
+ *
  */
 package org.apache.mina.filter.codec;
 
@@ -35,7 +35,7 @@
  * An {@link IoFilter} which translates binary or protocol specific data into
  * message object and vice versa using {@link ProtocolCodecFactory},
  * {@link ProtocolEncoder}, or {@link ProtocolDecoder}.
- * 
+ *
  * @author The Apache Directory Project (mina-dev@directory.apache.org)
  * @version $Rev$, $Date$
  */
@@ -45,7 +45,7 @@
 
     public static final String DECODER = ProtocolCodecFilter.class.getName()
             + ".decoder";
-    
+
     private static final String DECODER_OUT = ProtocolCodecFilter.class.getName()
             + ".decoderOut";
 
@@ -71,7 +71,7 @@
             throw new NullPointerException("decoder");
         }
 
-        this.factory = new ProtocolCodecFactory() {
+        factory = new ProtocolCodecFactory() {
             public ProtocolEncoder getEncoder() {
                 return encoder;
             }
@@ -111,7 +111,7 @@
                     "decoderClass doesn't have a public default constructor.");
         }
 
-        this.factory = new ProtocolCodecFactory() {
+        factory = new ProtocolCodecFactory() {
             public ProtocolEncoder getEncoder() throws Exception {
                 return (ProtocolEncoder) encoderClass.newInstance();
             }
@@ -145,6 +145,11 @@
         }
 
         ByteBuffer in = (ByteBuffer) message;
+        if (!in.hasRemaining()) {
+            in.release();
+            return;
+        }
+
         ProtocolDecoder decoder = getDecoder(session);
         ProtocolDecoderOutput decoderOut = getDecoderOut(session, nextFilter);
 
@@ -160,7 +165,7 @@
             } else {
                 pde = new ProtocolDecoderException(t);
             }
-            
+
             if (pde.getHexdump() == null) {
                 int curPos = in.position();
                 in.position(oldPos);
@@ -312,11 +317,11 @@
                     + decoder.getClass().getName() + " (" + decoder + ')');
         }
     }
-    
+
     private void disposeDecoderOut(IoSession session) {
         session.removeAttribute(DECODER_OUT);
     }
-    
+
     private static class HiddenByteBuffer extends ByteBufferProxy {
         private HiddenByteBuffer(ByteBuffer buf) {
             super(buf);

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=658082&r1=658081&r2=658082&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Mon May 19 18:53:17 2008
@@ -71,7 +71,7 @@
             throw new NullPointerException("decoder");
         }
 
-        this.factory = new ProtocolCodecFactory() {
+        factory = new ProtocolCodecFactory() {
             public ProtocolEncoder getEncoder() {
                 return encoder;
             }
@@ -112,7 +112,7 @@
                     "decoderClass doesn't have a public default constructor.");
         }
 
-        this.factory = new ProtocolCodecFactory() {
+        factory = new ProtocolCodecFactory() {
             public ProtocolEncoder getEncoder() throws Exception {
                 return encoderClass.newInstance();
             }
@@ -149,6 +149,11 @@
         }
 
         ByteBuffer in = (ByteBuffer) message;
+        if (!in.hasRemaining()) {
+            in.release();
+            return;
+        }
+
         ProtocolDecoder decoder = getDecoder(session);
         ProtocolDecoderOutput decoderOut = getDecoderOut(session, nextFilter);
 
@@ -318,11 +323,11 @@
                     + decoder.getClass().getName() + " (" + decoder + ')');
         }
     }
-    
+
     private void disposeDecoderOut(IoSession session) {
         session.removeAttribute(DECODER_OUT);
     }
-    
+
     private static class HiddenByteBuffer extends ByteBufferProxy {
         private HiddenByteBuffer(ByteBuffer buf) {
             super(buf);