From da68412590d7b135e875829de62e21db889f5782 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Mon, 22 Feb 2021 16:51:51 +0100 Subject: [PATCH] Allow newlines and quote characters within mail body delimiters --- app/models/mail_handler.rb | 13 ++++++++++++- .../issue_update_with_quoted_reply_above.eml | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index db9358eef8..5c16537092 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -622,10 +622,21 @@ def cleanup_body(body) rescue RegexpError => e logger&.error "MailHandler: invalid regexp delimiter found in mail_handler_body_delimiters setting (#{e.message})" end + else + # In a "normal" delimiter, allow a single space from the originally + # defined delimiter to match: + # * any space-like character, or + # * line-breaks and optional quoting with arbitrary spacing around it + # in the mail in order to allow line breaks of delimiters. + delimiters = delimiters.map do |delimiter| + delimiter = Regexp.escape(delimiter).encode!(Encoding::UTF_8) + delimiter = delimiter.gsub(/(\\ )+/, '\p{Space}*(\p{Space}|[\r\n](\p{Space}|>)*)') + Regexp.new(delimiter) + end end unless delimiters.empty? - regex = Regexp.new("^[> ]*(#{ Regexp.union(delimiters) })[[:blank:]]*[\r\n].*", Regexp::MULTILINE) + regex = Regexp.new("^(\\p{Space}|>)*(#{ Regexp.union(delimiters) })\\p{Space}*[\\r\\n].*", Regexp::MULTILINE) body = body.gsub(regex, '') end body.strip diff --git a/test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml b/test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml index f3a938a60a..c40bc61e8e 100644 --- a/test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml +++ b/test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml @@ -33,7 +33,8 @@ sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse platea dictumst. -> --- Reply above. Do not remove this line. --- +> --- Reply above. Do not +> remove this line. --- > > Issue #6779 has been updated by Eric Davis. > -- 2.26.2