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/03/12 07:51:34 UTC
svn commit: r636220 - in /mina:
branches/1.0/core/src/main/java/org/apache/mina/filter/codec/textline/
branches/1.1/core/src/main/java/org/apache/mina/filter/codec/textline/
trunk/core/src/main/java/org/apache/mina/filter/codec/textline/
trunk/core/src...
Author: trustin
Date: Tue Mar 11 23:51:31 2008
New Revision: 636220
URL: http://svn.apache.org/viewvc?rev=636220&view=rev
Log:
Fixed issue: DIRMINA-536 - TextLineDecoder throws an IndexOutOfBoundsException
* Added an if block that checks the case that matchCount is greater than the current buffer position
Modified:
mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java
mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java
mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineDecoderTest.java
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java?rev=636220&r1=636219&r2=636220&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java Tue Mar 11 23:51:31 2008
@@ -254,9 +254,14 @@
matchCount = 0;
}
} else {
- // fix for DIRMINA-506
- in.position(in.position()-matchCount);
- matchCount = 0;
+ // fix for DIRMINA-506 & DIRMINA-536
+ if (in.position() >= matchCount) {
+ in.position(in.position() - matchCount);
+ matchCount = 0;
+ } else {
+ matchCount -= in.position();
+ in.position(0);
+ }
}
}
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java?rev=636220&r1=636219&r2=636220&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java Tue Mar 11 23:51:31 2008
@@ -252,9 +252,14 @@
matchCount = 0;
}
} else {
- // fix for DIRMINA-506
- in.position(in.position()-matchCount);
- matchCount = 0;
+ // fix for DIRMINA-506 & DIRMINA-536
+ if (in.position() >= matchCount) {
+ in.position(in.position() - matchCount);
+ matchCount = 0;
+ } else {
+ matchCount -= in.position();
+ in.position(0);
+ }
}
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java?rev=636220&r1=636219&r2=636220&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java Tue Mar 11 23:51:31 2008
@@ -277,9 +277,14 @@
matchCount = 0;
}
} else {
- // fix for DIRMINA-506
- in.position(in.position()-matchCount);
- matchCount = 0;
+ // fix for DIRMINA-506 & DIRMINA-536
+ if (in.position() >= matchCount) {
+ in.position(in.position() - matchCount);
+ matchCount = 0;
+ } else {
+ matchCount -= in.position();
+ in.position(0);
+ }
}
}
Modified: mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineDecoderTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineDecoderTest.java?rev=636220&r1=636219&r2=636220&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineDecoderTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineDecoderTest.java Tue Mar 11 23:51:31 2008
@@ -316,4 +316,21 @@
// Memory consumption should be minimal.
Assert.assertTrue(Runtime.getRuntime().freeMemory() - oldFreeMemory < 1048576);
}
+
+ public void testSMTPDataBounds() throws Exception {
+ TextLineDecoder decoder = new TextLineDecoder(Charset.forName("ISO-8859-1"),
+ new LineDelimiter("\r\n.\r\n"));
+
+ CharsetEncoder encoder = Charset.forName("ISO-8859-1").newEncoder();
+ ProtocolCodecSession session = new ProtocolCodecSession();
+ IoBuffer in = IoBuffer.allocate(16).setAutoExpand(true);
+
+ in.putString("\r\n", encoder).flip().mark();
+ decoder.decode(session, in.reset().mark(), session.getDecoderOutput());
+ Assert.assertEquals(0, session.getDecoderOutputQueue().size());
+ in.putString("Body\r\n.\r\n", encoder).flip().mark();
+ decoder.decode(session, in.reset().mark(), session.getDecoderOutput());
+ Assert.assertEquals(1, session.getDecoderOutputQueue().size());
+ Assert.assertEquals("\r\n\r\nBody", session.getDecoderOutputQueue().poll());
+ }
}