]> source.dussan.org Git - redmine.git/commitdiff
Merged r18245 to 4.0-stable (#31365).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 10 Jun 2019 11:41:31 +0000 (11:41 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 10 Jun 2019 11:41:31 +0000 (11:41 +0000)
git-svn-id: http://svn.redmine.org/redmine/branches/4.0-stable@18246 e93f8b46-1217-0410-a6f0-8f06a7374b81

config/initializers/10-patches.rb
test/fixtures/mail_handler/ticket_with_split_bytes_subject.eml [new file with mode: 0644]
test/unit/mail_handler_test.rb

index 8d73eba2c54abaaa50e6c1ec05cb7ea75c5a7769..c1c24fc9636e7cb2a62537634618ecea25bc89fe 100644 (file)
@@ -105,6 +105,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 (file)
index 0000000..52b8099
--- /dev/null
@@ -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.
index 940dce5c46abc69adb9b36644b0d9a2613c70aec..45dc6323746a588cbf1e92b7e248ed9e5c402863 100644 (file)
@@ -1133,6 +1133,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)