]> source.dussan.org Git - redmine.git/commitdiff
Allow newlines and quote characters within mail body delimiters (#34794).
authorGo MAEDA <maeda@farend.jp>
Tue, 9 Mar 2021 08:28:01 +0000 (08:28 +0000)
committerGo MAEDA <maeda@farend.jp>
Tue, 9 Mar 2021 08:28:01 +0000 (08:28 +0000)
Patch by Holger Just.

git-svn-id: http://svn.redmine.org/redmine/trunk@20767 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mail_handler.rb
test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml

index db9358eef8b08e350e200bc2926d627c6b3e09ff..5c16537092a2fcfce4fdffb57ed88ba8e247449a 100644 (file)
@@ -622,10 +622,21 @@ class MailHandler < ActionMailer::Base
       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
index f3a938a60ae6ecd77adca63e4a41bd659d50ca6f..c40bc61e8e168d597cbb941e919ac8a17709781f 100644 (file)
@@ -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.
 >