dovecot-2.0: mbox: Fix to handling CRs before From_ lines.

dovecot at dovecot.org dovecot at dovecot.org
Fri May 1 20:15:45 EEST 2009


details:   http://hg.dovecot.org/dovecot-2.0/rev/44bd81c9d11a
changeset: 9194:44bd81c9d11a
user:      Timo Sirainen <tss at iki.fi>
date:      Fri May 01 13:15:30 2009 -0400
description:
mbox: Fix to handling CRs before From_ lines.

diffstat:

1 file changed, 11 insertions(+), 11 deletions(-)
src/lib-storage/index/mbox/istream-raw-mbox.c |   22 +++++++++++-----------

diffs (42 lines):

diff -r 39f66363ec56 -r 44bd81c9d11a src/lib-storage/index/mbox/istream-raw-mbox.c
--- a/src/lib-storage/index/mbox/istream-raw-mbox.c	Fri May 01 13:05:45 2009 -0400
+++ b/src/lib-storage/index/mbox/istream-raw-mbox.c	Fri May 01 13:15:30 2009 -0400
@@ -295,19 +295,19 @@ static ssize_t i_stream_raw_mbox_read(st
 				/* potential From-line, see if we have the
 				   rest of the line buffered. */
 				i++;
+				if (i >= 7 && buf[i-7] == '\r') {
+					/* CR also belongs to it. */
+					crlf_ending = TRUE;
+					from_start_pos = i - 7;
+				} else {
+					crlf_ending = FALSE;
+					from_start_pos = i - 6;
+				}
+
 				if (rstream->hdr_offset + rstream->mail_size ==
-				    stream->istream.v_offset + i - 6 ||
+				    stream->istream.v_offset + from_start_pos ||
 				    rstream->mail_size == (uoff_t)-1) {
 					from_after_pos = i;
-					from_start_pos = i - 6;
-					if (from_start_pos > 0 &&
-					    buf[from_start_pos-1] == '\r') {
-						/* CR also belongs to it. */
-						crlf_ending = TRUE;
-						from_start_pos--;
-					} else {
-						crlf_ending = FALSE;
-					}
 					if (ret == -2) {
 						/* even if we don't have the
 						   whole line, we need to
@@ -316,7 +316,7 @@ static ssize_t i_stream_raw_mbox_read(st
 					}
 				}
 				fromp = mbox_from;
-			} else if (from_start_pos != (size_t)-1) {
+			} else if (from_after_pos != (size_t)-1) {
 				/* we have the whole From-line here now.
 				   See if it's a valid one. */
 			mbox_verify:


More information about the dovecot-cvs mailing list