You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mime4j-dev@james.apache.org by ol...@apache.org on 2011/06/22 10:34:42 UTC
svn commit: r1138335 - in /james/mime4j/trunk/core/src:
main/java/org/apache/james/mime4j/io/ test/java/org/apache/james/mime4j/io/
test/resources/testmsgs/
Author: olegk
Date: Wed Jun 22 08:34:41 2011
New Revision: 1138335
URL: http://svn.apache.org/viewvc?rev=1138335&view=rev
Log:
MIME4J-199: boundary scanning code in MimeBoundaryInputStream improved; extra check added to ensure that multipart boundary is properly terminated with a whitedspace or '-' char
Added:
james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.msg (with props)
james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.out (with props)
james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.xml (with props)
james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded.xml (with props)
james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_1.txt (with props)
james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_2.txt (with props)
james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_2.txt (with props)
Modified:
james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/MimeBoundaryInputStream.java
james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/MimeBoundaryInputStreamTest.java
Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/MimeBoundaryInputStream.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/MimeBoundaryInputStream.java?rev=1138335&r1=1138334&r2=1138335&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/MimeBoundaryInputStream.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/io/MimeBoundaryInputStream.java Wed Jun 22 08:34:41 2011
@@ -22,6 +22,7 @@ package org.apache.james.mime4j.io;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.MimeIOException;
import org.apache.james.mime4j.util.ByteArrayBuffer;
+import org.apache.james.mime4j.util.CharsetUtil;
import java.io.IOException;
@@ -227,15 +228,30 @@ public class MimeBoundaryInputStream ext
bytesRead = 0;
}
-
- int i = buffer.indexOf(boundary);
- // NOTE this currently check only for LF. It doesn't check for canonical CRLF
- // and neither for isolated CR. This will require updates according to MIME4J-60
- while (i > buffer.pos() && buffer.byteAt(i-1) != '\n') {
- // skip the "fake" boundary (it does not contain LF or CR so we cannot have
- // another boundary starting before this is complete.
- i = i + boundary.length;
- i = buffer.indexOf(boundary, i, buffer.limit() - i);
+ int i;
+ int off = buffer.pos();
+ for (;;) {
+ i = buffer.indexOf(boundary, off, buffer.limit() - off);
+ if (i == -1) {
+ break;
+ }
+ // Make sure the boundary is either at the very beginning of the buffer
+ // or preceded with LF
+ if (i == buffer.pos() || buffer.byteAt(i - 1) == '\n') {
+ int pos = i + boundary.length;
+ int remaining = buffer.limit() - pos;
+ if (remaining <= 0) {
+ // Make sure the boundary is terminated with EOS
+ break;
+ } else {
+ // or with a whitespace or '-' char
+ char ch = (char)(buffer.byteAt(pos));
+ if (CharsetUtil.isWhitespace(ch) || ch == '-') {
+ break;
+ }
+ }
+ }
+ off = i + boundary.length;
}
if (i != -1) {
limit = i;
@@ -245,8 +261,8 @@ public class MimeBoundaryInputStream ext
if (eof) {
limit = buffer.limit();
} else {
- limit = buffer.limit() - (boundary.length + 1);
- // \r\n + (boundary - one char)
+ limit = buffer.limit() - (boundary.length + 2);
+ // [LF] [boundary] [CR][LF] minus one char
}
}
return bytesRead;
Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/MimeBoundaryInputStreamTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/MimeBoundaryInputStreamTest.java?rev=1138335&r1=1138334&r2=1138335&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/MimeBoundaryInputStreamTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/io/MimeBoundaryInputStreamTest.java Wed Jun 22 08:34:41 2011
@@ -218,7 +218,7 @@ public class MimeBoundaryInputStreamTest
* Tests that a stream containing only a boundary is empty.
*/
public void testPrefixIsBoundary() throws IOException {
- String text = "Line 1\r\n\r\n--boundaryyada\r\n";
+ String text = "Line 1\r\n\r\n--boundary\r\n";
ByteArrayInputStream bis = new ByteArrayInputStream(text.getBytes());
BufferedLineReaderInputStream buffer = new BufferedLineReaderInputStream(bis, 4096);
@@ -226,7 +226,7 @@ public class MimeBoundaryInputStreamTest
new MimeBoundaryInputStream(buffer, "boundary");
assertEquals("Line 1\r\n", read(stream, 100));
- text = "--boundaryyada\r\n";
+ text = "--boundary\r\n";
bis = new ByteArrayInputStream(text.getBytes());
buffer = new BufferedLineReaderInputStream(bis, 4096);
Added: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.msg
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.msg?rev=1138335&view=auto
==============================================================================
Binary file - no diff available.
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.msg
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.out
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.out?rev=1138335&view=auto
==============================================================================
Binary file - no diff available.
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.out
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.xml
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.xml?rev=1138335&view=auto
==============================================================================
Binary file - no diff available.
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.xml
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries.xml
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded.xml
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded.xml?rev=1138335&view=auto
==============================================================================
Binary file - no diff available.
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded.xml
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded.xml
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_1.txt
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_1.txt?rev=1138335&view=auto
==============================================================================
Binary file - no diff available.
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_1.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_1.txt
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_1.txt
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_2.txt
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_2.txt?rev=1138335&view=auto
==============================================================================
Binary file - no diff available.
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_2.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_2.txt
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_1_2.txt
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_2.txt
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_2.txt?rev=1138335&view=auto
==============================================================================
Binary file - no diff available.
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_2.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_2.txt
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: james/mime4j/trunk/core/src/test/resources/testmsgs/overlapping-boundaries_decoded_1_2.txt
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream