summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2019-06-10 11:40:48 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2019-06-10 11:40:48 +0000
commit7a66b3b1da98a0d898d1ca37e10b79a780f3381c (patch)
tree750b8ffb046080c65604f443a3cc9a918eb84dc7
parent2a0dd8372f6b8a314fb7d30fbfbde62636023d92 (diff)
downloadredmine-7a66b3b1da98a0d898d1ca37e10b79a780f3381c.tar.gz
redmine-7a66b3b1da98a0d898d1ca37e10b79a780f3381c.zip
Issue subject may be broken if the subject field is split into multiple lines (#31365).
Patch by Yuichi HARADA. git-svn-id: http://svn.redmine.org/redmine/trunk@18245 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--config/initializers/10-patches.rb14
-rw-r--r--test/fixtures/mail_handler/ticket_with_split_bytes_subject.eml9
-rw-r--r--test/unit/mail_handler_test.rb11
3 files changed, 34 insertions, 0 deletions
diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb
index e0559903b..06edc943a 100644
--- a/config/initializers/10-patches.rb
+++ b/config/initializers/10-patches.rb
@@ -107,6 +107,20 @@ end
require 'mail'
+module Mail
+ class SubjectField
+ # Fixed that the issue subject may be broken if the subject field in the
+ # receiving email is split into multiple lines
+ def initialize(value = nil, charset = 'utf-8')
+ if mime_encode = /^(=\?\S+\?\S\?)/.match(value).to_a[1]
+ value.gsub!(/\?=\s+#{Regexp.escape(mime_encode)}/, '')
+ end
+ self.charset = charset
+ super(CAPITALIZED_FIELD, value, charset)
+ end
+ end
+end
+
module DeliveryMethods
class TmpFile
def initialize(*args); end
diff --git a/test/fixtures/mail_handler/ticket_with_split_bytes_subject.eml b/test/fixtures/mail_handler/ticket_with_split_bytes_subject.eml
new file mode 100644
index 000000000..52b8099e9
--- /dev/null
+++ b/test/fixtures/mail_handler/ticket_with_split_bytes_subject.eml
@@ -0,0 +1,9 @@
+Date: Mon, 13 May 2019 13:39:29 +0900
+Message-ID: <CALXUZfgwpW-hizEabSAjjkykQGV6-V6bwKu693Cr7cDH6DR7pQ@mail.gmail.com>
+Subject: =?utf-8?B?zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bP?=
+ =?utf-8?B?h8+Iz4k=?=
+From: <foo@example.com>
+To: <baz@example.com>
+Content-Type: text/plain
+
+Split bytes subject.
diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb
index 469722a37..ed064f6f7 100644
--- a/test/unit/mail_handler_test.rb
+++ b/test/unit/mail_handler_test.rb
@@ -1147,6 +1147,17 @@ class MailHandlerTest < ActiveSupport::TestCase
assert_equal issue.subject, 'New ticket on a given project with a very long subject line which exceeds 255 chars and should not be ignored but chopped off. And if the subject line is still not long enough, we just add more text. And more text. Wow, this is really annoying. Especially, if you have nothing to say...'[0,255]
end
+ def test_email_with_split_bytes_subject
+ issue = submit_email(
+ 'ticket_with_split_bytes_subject.eml',
+ :issue => {:project => 'ecookbook'},
+ :no_permission_check => '1',
+ :unknown_user => 'accept'
+ )
+ assert issue.is_a?(Issue)
+ assert_equal 'αβγδεζηθικλμνξοπρςστυφχψω', issue.subject
+ end
+
def test_first_keyword_should_be_matched
issue = submit_email('ticket_with_duplicate_keyword.eml', :allow_override => 'priority')
assert issue.is_a?(Issue)