You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ba...@apache.org on 2008/07/30 13:03:27 UTC
svn commit: r680973 -
/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeBoundaryInputStream.java
Author: bago
Date: Wed Jul 30 04:03:25 2008
New Revision: 680973
URL: http://svn.apache.org/viewvc?rev=680973&view=rev
Log:
Make sure we find boundaries only at the beginning of a line (MIME4J-54)
Everything in a line starting with a boundary is ignored and not considered part of the following part.
Modified:
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeBoundaryInputStream.java
Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeBoundaryInputStream.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeBoundaryInputStream.java?rev=680973&r1=680972&r2=680973&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeBoundaryInputStream.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeBoundaryInputStream.java Wed Jul 30 04:03:25 2008
@@ -193,7 +193,16 @@
}
eof = bytesRead == -1;
+
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 > 0 && buffer.charAt(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);
+ }
if (i != -1) {
limit = i;
atBoundary = true;
@@ -230,43 +239,40 @@
if (!completed) {
completed = true;
buffer.skip(boundaryLen);
+ boolean checkForLastPart = true;
for (;;) {
if (buffer.length() > 1) {
int ch1 = buffer.charAt(buffer.pos());
int ch2 = buffer.charAt(buffer.pos() + 1);
- if (ch1 == '-' && ch2 == '-') {
+
+ if (checkForLastPart) if (ch1 == '-' && ch2 == '-') {
this.lastPart = true;
buffer.skip(2);
+ checkForLastPart = false;
+ continue;
+ }
+
+ if (ch1 == '\r' && ch2 == '\n') {
+ buffer.skip(2);
+ break;
+ } else if (ch1 == '\n') {
+ buffer.skip(1);
+ break;
+ } else {
+ // ignoring everything in a line starting with a boundary.
+ buffer.skip(1);
}
- skipLineDelimiter();
- break;
+
} else {
+ if (eof) {
+ break;
+ }
fillBuffer();
}
- if (eof) {
- break;
- }
}
}
}
- private void skipLineDelimiter() {
- int ch1 = 0;
- int ch2 = 0;
- int len = buffer.length();
- if (len > 0) {
- ch1 = buffer.charAt(buffer.pos());
- }
- if (len > 1) {
- ch2 = buffer.charAt(buffer.pos() + 1);
- }
- if (ch1 == '\r' && ch2 == '\n') {
- buffer.skip(2);
- } else if (ch1 == '\n') {
- buffer.skip(1);
- }
- }
-
public boolean isLastPart() {
return lastPart;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org