+Description: Spamass-milter doesn't properly maintain CRLF in folded header newlines.
+Origin: https://bz.apache.org/SpamAssassin/show_bug.cgi?id=7785
+Bug: #7785
+Author: Henrik Krohns, Matthieu Schapranow <schapranow@hpi.de<mailto:schapranow@hpi.de>, Don Armstrong <don@debian.org>
+Forwarded: no
+--- a/spamass-milter.cpp
++++ b/spamass-milter.cpp
+@@ -1135,7 +1135,25 @@
+ assassin->set_subject(headerv);
+
+ // assemble header to be written to SpamAssassin
+- string header = string(headerf) + ": " + headerv + "\r\n";
++ string header = headerv;
++
++ // Replace all LF with CRLF
++ // As milter documentation says:
++ // headerv Header field value. The content of the header may
++ // include folded white space, i.e., multiple lines with following
++ // white space where lines are separated by LF (not CR/LF). The
++ // trailing line terminator (CR/LF) is removed.
++ // Need to make sure folded header line breaks are sent to SA as CRLF
++ string::size_type idx = header.size();
++ while ( (idx = header.rfind("\n", idx)) != string::npos )
++ {
++ if (idx > 0 && header[idx-1] != '\r') {
++ header.replace(idx,1,"\r\n");
++ }
++ }
++
++ // final assembly
++ header = string(headerf) + ": " + header + "\r\n";
+
+ try {
+ // write to SpamAssassin client