From 01e590c6560d4eaab86852cb01df8c8bbff93050 Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Sun, 16 Mar 2025 16:00:37 -0700 Subject: [PATCH] Use CRLF in folded headers instead of LF (closes: #1031417). Thanks to Matthieu Schapranow for the patch. --- debian/patches/crlf_in_generated_header | 34 +++++++++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 35 insertions(+) create mode 100644 debian/patches/crlf_in_generated_header diff --git a/debian/patches/crlf_in_generated_header b/debian/patches/crlf_in_generated_header new file mode 100644 index 0000000..b1a8d15 --- /dev/null +++ b/debian/patches/crlf_in_generated_header @@ -0,0 +1,34 @@ +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 , Don Armstrong +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 diff --git a/debian/patches/series b/debian/patches/series index 3987373..b035f04 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,3 +3,4 @@ fix_spacing_in_received_header auth_in_received queueid_in_envrcpt update_for_new_autoconf +crlf_in_generated_header -- 2.39.5