Author: niklas Date: Mon Jul 21 02:23:31 2008 New Revision: 678373 URL: http://svn.apache.org/viewvc?rev=678373&view=rev Log: Fix for MIME4J-61: Large inputs will not cause ArrayIndexOutOfBoundsException anymore when encoded using quoted printable.
Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java?rev=678373&r1=678372&r2=678373&view=diff ============================================================================== --- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java (original) +++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java Mon Jul 21 02:23:31 2008 @@ -146,11 +146,9 @@ } private void write(byte next) throws IOException { - outBuffer[outputIndex] = next; + outBuffer[outputIndex++] = next; if (outputIndex >= outBuffer.length) { flushOutput(); - } else { - outputIndex++; } } Modified: james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java?rev=678373&r1=678372&r2=678373&view=diff ============================================================================== --- james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java (original) +++ james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java Mon Jul 21 02:23:31 2008 @@ -21,6 +21,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.InputStream; import org.apache.james.mime4j.ExampleMail; @@ -44,6 +45,20 @@ assertEquals(content, out.toByteArray()); } + public void testEncodeQuotedPrintableLargeInput() throws Exception { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < 1024 * 5; i++) { + sb.append((char) ('0' + (i % 10))); + } + String expected = sb.toString().replaceAll("(\\d{75})", "$1=\r\n"); + + InputStream in = new ByteArrayInputStream(sb.toString().getBytes("US-ASCII")); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + CodecUtil.encodeQuotedPrintableBinary(in, out); + String actual = new String(out.toByteArray(), "US-ASCII"); + assertEquals(expected, actual); + } + private void assertEquals(byte[] expected, byte[] actual) { StringBuffer buffer = new StringBuffer(expected.length); assertEquals(expected.length, actual.length); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]