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
This commit is contained in:
Jean-Philippe Lang
2019-06-10 11:40:48 +00:00
parent 2a0dd8372f
commit 7a66b3b1da
3 changed files with 34 additions and 0 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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)