mirror of
https://github.com/redmine/redmine.git
synced 2025-11-05 04:45:57 +01:00
Empty email attachments are imported to Redmine, creating broken DB records (#27885).
Patch by Felix Schäfer. git-svn-id: http://svn.redmine.org/redmine/trunk@17147 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -296,6 +296,7 @@ class MailHandler < ActionMailer::Base
|
|||||||
if email.attachments && email.attachments.any?
|
if email.attachments && email.attachments.any?
|
||||||
email.attachments.each do |attachment|
|
email.attachments.each do |attachment|
|
||||||
next unless accept_attachment?(attachment)
|
next unless accept_attachment?(attachment)
|
||||||
|
next unless attachment.body.decoded.size > 0
|
||||||
obj.attachments << Attachment.create(:container => obj,
|
obj.attachments << Attachment.create(:container => obj,
|
||||||
:file => attachment.body.decoded,
|
:file => attachment.body.decoded,
|
||||||
:filename => attachment.filename,
|
:filename => attachment.filename,
|
||||||
|
|||||||
58
test/fixtures/mail_handler/ticket_with_empty_attachment.eml
vendored
Normal file
58
test/fixtures/mail_handler/ticket_with_empty_attachment.eml
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
Return-Path: <jsmith@somenet.foo>
|
||||||
|
Received: from osiris ([127.0.0.1])
|
||||||
|
by OSIRIS
|
||||||
|
with hMailServer ; Sat, 21 Jun 2008 15:53:25 +0200
|
||||||
|
Message-ID: <002301c8d3a6$2cdf6950$0a00a8c0@osiris>
|
||||||
|
From: "John Smith" <jsmith@somenet.foo>
|
||||||
|
To: <redmine@somenet.foo>
|
||||||
|
Subject: Ticket created by email with attachment
|
||||||
|
Date: Sat, 21 Jun 2008 15:53:25 +0200
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: multipart/mixed;
|
||||||
|
boundary="----=_NextPart_000_001F_01C8D3B6.F05C5270"
|
||||||
|
X-Priority: 3
|
||||||
|
X-MSMail-Priority: Normal
|
||||||
|
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
|
||||||
|
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
|
||||||
|
|
||||||
|
This is a multi-part message in MIME format.
|
||||||
|
|
||||||
|
------=_NextPart_000_001F_01C8D3B6.F05C5270
|
||||||
|
Content-Type: multipart/alternative;
|
||||||
|
boundary="----=_NextPart_001_0020_01C8D3B6.F05C5270"
|
||||||
|
|
||||||
|
|
||||||
|
------=_NextPart_001_0020_01C8D3B6.F05C5270
|
||||||
|
Content-Type: text/plain;
|
||||||
|
charset="iso-8859-1"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
This is a new ticket with attachments
|
||||||
|
------=_NextPart_001_0020_01C8D3B6.F05C5270
|
||||||
|
Content-Type: text/html;
|
||||||
|
charset="iso-8859-1"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<HTML><HEAD>
|
||||||
|
<META http-equiv=3DContent-Type content=3D"text/html; =
|
||||||
|
charset=3Diso-8859-1">
|
||||||
|
<META content=3D"MSHTML 6.00.2900.2883" name=3DGENERATOR>
|
||||||
|
<STYLE></STYLE>
|
||||||
|
</HEAD>
|
||||||
|
<BODY bgColor=3D#ffffff>
|
||||||
|
<DIV><FONT face=3DArial size=3D2>This is a new ticket with=20
|
||||||
|
attachments</FONT></DIV></BODY></HTML>
|
||||||
|
|
||||||
|
------=_NextPart_001_0020_01C8D3B6.F05C5270--
|
||||||
|
|
||||||
|
------=_NextPart_000_001F_01C8D3B6.F05C5270
|
||||||
|
Content-Type: application/json;
|
||||||
|
name="response.json"
|
||||||
|
Content-Transfer-Encoding: base64
|
||||||
|
Content-Disposition: attachment;
|
||||||
|
filename="response.json"
|
||||||
|
|
||||||
|
|
||||||
|
------=_NextPart_000_001F_01C8D3B6.F05C5270--
|
||||||
|
|
||||||
@@ -631,6 +631,14 @@ class MailHandlerTest < ActiveSupport::TestCase
|
|||||||
assert_equal content, File.read(attachment.diskfile).force_encoding('CP852')
|
assert_equal content, File.read(attachment.diskfile).force_encoding('CP852')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_empty_attachment_should_not_be_imported
|
||||||
|
issue = submit_email(
|
||||||
|
'ticket_with_empty_attachment.eml',
|
||||||
|
issue: { project: 'ecookbook' }
|
||||||
|
)
|
||||||
|
assert_equal 0, issue.attachments.size
|
||||||
|
end
|
||||||
|
|
||||||
def test_multiple_inline_text_parts_should_be_appended_to_issue_description
|
def test_multiple_inline_text_parts_should_be_appended_to_issue_description
|
||||||
issue = submit_email('multiple_text_parts.eml', :issue => {:project => 'ecookbook'})
|
issue = submit_email('multiple_text_parts.eml', :issue => {:project => 'ecookbook'})
|
||||||
assert_include 'first', issue.description
|
assert_include 'first', issue.description
|
||||||
|
|||||||
Reference in New Issue
Block a user