]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-mail: quoted_printable_decode*() now returns all newlines as CRLF.
authorTimo Sirainen <tss@iki.fi>
Thu, 4 Apr 2013 16:18:22 +0000 (19:18 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 4 Apr 2013 16:18:22 +0000 (19:18 +0300)
This is required by BINARY fetches, since the original data had CRLFs.

src/lib-mail/quoted-printable.c
src/lib-mail/quoted-printable.h
src/lib-mail/test-quoted-printable.c

index 8ecfa58d3d0d937ea171d138b0414fb9bfaf8798..9ae9e58a10b2147fb8244abd5fb591adab4c867f 100644 (file)
@@ -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;
                }
index 9c461ff1823c2db4e369734bafe7f5ac57e0030f..3685f195799ffd19ef495f1607c1c9b6d36c3629 100644 (file)
@@ -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. */
index 8adf1dcd416b81a07d15fad65919087862802d74..a6f78248691aa75f71eebe5271c66826af90e135 100644 (file)
@@ -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 },