------- You are receiving this mail because: ------- You are on the CC list for the bug.
http://bugs.exim.org/show_bug.cgi?id=1444 Summary: non-SMTP without -oi mangles linefeeds on multiple CRLF Product: Exim Version: N/A Platform: Other OS/Version: Linux Status: NEW Severity: bug Priority: medium Component: Delivery in general AssignedTo: [email protected] ReportedBy: [email protected] CC: [email protected] As reported on exim-users in Message-ID: <capg4ibc_am90dcukjkcqwredime2njqjtxpcwk-55nz68bm...@mail.gmail.com> Sending a mailbody on commandline with eg: echo -en "To: [email protected]\r\nSubject: test\r\n\r\ntest\r\n\r\ntest"|exim -d+all -f [email protected] [email protected] ends up in broken DKIM signatures. This is not caused by the DKIM code itself. The debug output already shows "test{CR}{LF}{CR}{CR}{LF}test" coming through pdkim_feed(). It only happens if -oi is _not_ set and the messagebody ends either with a "." or EOF. The doubled {CR} is introduced by the code in received.c:609ff:read_message_data() The code for "dot_ends==true" in lines 661ff doesn't handle the "\r\n\r\n" case correctly IMO. strace shows that it already ends up in the spool file as 21449 write(3, "1WFQ3f-0005Zx-07-D\ntest\n\r\n\r\ntest\n", 33) = 33 The "\r" right after "\n" is written instead of silently removed. I think -------- --- receive.c.orig 2013-10-25 02:46:27.000000000 +0200 +++ receive.c 2014-02-17 16:56:37.000000000 +0100 @@ -680,6 +680,7 @@ case 1: /* After written "\n" */ if (ch == '.') { ch_state = 3; continue; } + if (ch == '\r') { ch_state = 2; continue; } if (ch != '\n') ch_state = 0; else linelength = -1; break; -------- should fix it. -- Configure bugmail: http://bugs.exim.org/userprefs.cgi?tab=email -- ## List details at https://lists.exim.org/mailman/listinfo/exim-dev Exim details at http://www.exim.org/ ##
