From: Timo Sirainen Date: Thu, 4 Apr 2013 16:18:22 +0000 (+0300) Subject: lib-mail: quoted_printable_decode*() now returns all newlines as CRLF. X-Git-Tag: 2.2.rc4~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e8ee95581992b8f7d734981550018d7ecdaae6b8;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: quoted_printable_decode*() now returns all newlines as CRLF. This is required by BINARY fetches, since the original data had CRLFs. --- diff --git a/src/lib-mail/quoted-printable.c b/src/lib-mail/quoted-printable.c index 8ecfa58d3d..9ae9e58a10 100644 --- a/src/lib-mail/quoted-printable.c +++ b/src/lib-mail/quoted-printable.c @@ -33,7 +33,7 @@ quoted_printable_decode_full(const unsigned char *src, size_t src_size, { char hexbuf[3]; size_t src_pos, pos, next; - bool have_cr, errors = FALSE; + bool errors = FALSE; int ret; hexbuf[2] = '\0'; @@ -46,18 +46,13 @@ quoted_printable_decode_full(const unsigned char *src, size_t src_size, if (src[src_pos] == '\n') { /* drop trailing whitespace */ pos = src_pos; - if (pos > 0 && src[pos-1] == '\r') { + if (pos > 0 && src[pos-1] == '\r') pos--; - have_cr = TRUE; - } else { - have_cr = FALSE; - } while (pos > 0 && QP_IS_TRAILING_SPACE(src[pos-1])) pos--; buffer_append(dest, src + next, pos - next); next = src_pos+1; - if (have_cr) - buffer_append_c(dest, '\r'); + buffer_append_c(dest, '\r'); buffer_append_c(dest, '\n'); continue; } diff --git a/src/lib-mail/quoted-printable.h b/src/lib-mail/quoted-printable.h index 9c461ff182..3685f19579 100644 --- a/src/lib-mail/quoted-printable.h +++ b/src/lib-mail/quoted-printable.h @@ -3,7 +3,8 @@ /* Translates quoted printable data into binary. dest must be at least the size of src, and may be same as src. Returns 0 if input was valid, -1 if - there were some decoding errors (which were skipped over). + there were some decoding errors (which were skipped over). LFs without + preceding CR are returned as CRLF (but =0A isn't). This function may be called multiple times for parsing the same stream. src_pos is updated to first non-translated character in src. */ diff --git a/src/lib-mail/test-quoted-printable.c b/src/lib-mail/test-quoted-printable.c index 8adf1dcd41..a6f7824869 100644 --- a/src/lib-mail/test-quoted-printable.c +++ b/src/lib-mail/test-quoted-printable.c @@ -21,7 +21,7 @@ static void test_quoted_printable_decode(void) { "foo = \n=01", "foo \001", 0, 0 }, { "foo =\t\r\nbar", "foo bar", 0, 0 }, { "foo =\r\n=01", "foo \001", 0, 0 }, - { "foo \nbar=", "foo\nbar", 1, 0 }, + { "foo \nbar=", "foo\r\nbar", 1, 0 }, { "=0A=0D ", "\n\r", 2, 0 }, { "foo_bar", "foo_bar", 0, 0 }, { "foo=", "foo", 1, 0 },