An Openfire community member contributed this change regarding a problem he was 
having in Openfire. I think I like this fix since the CumulativeProtocolDecoder 
is not delegating to subclasses to correctly handle decoding when there is 
nothing to decode. What do you think? BTW, this is for MINA 1.1.7.

Index: 
mina-1.1.7/core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java
===================================================================
--- 
mina-1.1.7/core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java
    (revision 1407)
+++ 
mina-1.1.7/core/src/main/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java
    (revision 1412)
@@ -128,20 +128,12 @@
             usingSessionBuffer = false;
         }

-        for (;;) {
+        boolean decoded = true;
+        for (;buf.hasRemaining() && decoded;) {
             int oldPos = buf.position();
-            boolean decoded = doDecode(session, buf, out);
-            if (decoded) {
-                if (buf.position() == oldPos) {
-                    throw new IllegalStateException(
-                            "doDecode() can't return true when buffer is not 
consumed.");
-                }
-
-                if (!buf.hasRemaining()) {
-                    break;
-                }
-            } else {
-                break;
+            decoded = doDecode(session, buf, out);
+            if (decoded && buf.position() == oldPos) {
+                throw new IllegalStateException("doDecode() can't return true 
when buffer is not consumed.");
             }
         }

Thanks,

  -- Gato

Reply via email to