]> source.dussan.org Git - redmine.git/commitdiff
Empty email attachments are imported to Redmine, creating broken DB records (#27885).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 7 Jan 2018 21:46:58 +0000 (21:46 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 7 Jan 2018 21:46:58 +0000 (21:46 +0000)
Patch by Felix Schäfer.

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

app/models/mail_handler.rb
test/fixtures/mail_handler/ticket_with_empty_attachment.eml [new file with mode: 0644]
test/unit/mail_handler_test.rb

index 9bcc1b12d7f1874fee4da7cec8b608d072e3e973..518e8c84b234758e742ddd434c486265fa0da964 100755 (executable)
@@ -296,6 +296,7 @@ class MailHandler < ActionMailer::Base
     if email.attachments && email.attachments.any?
       email.attachments.each do |attachment|
         next unless accept_attachment?(attachment)
+        next unless attachment.body.decoded.size > 0
         obj.attachments << Attachment.create(:container => obj,
                           :file => attachment.body.decoded,
                           :filename => attachment.filename,
diff --git a/test/fixtures/mail_handler/ticket_with_empty_attachment.eml b/test/fixtures/mail_handler/ticket_with_empty_attachment.eml
new file mode 100644 (file)
index 0000000..2dfc88b
--- /dev/null
@@ -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&nbsp; 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--
+
index ab95cd7122cab30040166fabe55e52891184d120..ea341d84906b6fa20d68769cf06d68f8bf51fb28 100644 (file)
@@ -631,6 +631,14 @@ class MailHandlerTest < ActiveSupport::TestCase
     assert_equal content, File.read(attachment.diskfile).force_encoding('CP852')
   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
     issue = submit_email('multiple_text_parts.eml', :issue => {:project => 'ecookbook'})
     assert_include 'first', issue.description