Skip to content

Commit

Permalink
* lib/net/imap.rb (body_type_1part): Gmail IMAP reports a body
Browse files Browse the repository at this point in the history
	  type as "MIXED" followed immediately by params
	  [ruby-core:62864] [Bug ruby#9885]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46331 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
shugo committed Jun 3, 2014
1 parent e7d8c47 commit 87505dd
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 0 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
Tue Jun 3 13:14:04 2014 Shugo Maeda <[email protected]>

* lib/net/imap.rb (body_type_1part): Gmail IMAP reports a body
type as "MIXED" followed immediately by params
[ruby-core:62864] [Bug #9885]
Patch by @rayners (David Raynes). [Fixes GH-622]
https://github.com/ruby/ruby/pull/622

Tue Jun 3 13:18:24 2014 Koichi Sasada <[email protected]>

* gc.c (objspace_live_slot): live slot count should not include final
Expand Down
9 changes: 9 additions & 0 deletions lib/net/imap.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2374,6 +2374,8 @@ def body_type_1part
return body_type_msg
when /\A(?:ATTACHMENT)\z/ni
return body_type_attachment
when /\A(?:MIXED)\z/ni
return body_type_mixed
else
return body_type_basic
end
Expand Down Expand Up @@ -2456,6 +2458,13 @@ def body_type_attachment
return BodyTypeAttachment.new(mtype, nil, param)
end

def body_type_mixed
mtype = "MULTIPART"
msubtype = case_insensitive_string
param, disposition, language, extension = body_ext_mpart
return BodyTypeBasic.new(mtype, msubtype, param, nil, nil, nil, nil, nil, disposition, language, extension)
end

def body_type_mpart
parts = []
while true
Expand Down
10 changes: 10 additions & 0 deletions test/net/imap/test_imap_response_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -248,4 +248,14 @@ def test_capability
assert_equal("CAPABILITY", response.name)
assert_equal("AUTH=PLAIN", response.data.last)
end

def test_mixed_boundry
parser = Net::IMAP::ResponseParser.new
response = parser.parse("* 2688 FETCH (UID 179161 BODYSTRUCTURE ((\"TEXT\" \"PLAIN\" (\"CHARSET\" \"iso-8859-1\") NIL NIL \"QUOTED-PRINTABLE\" 200 4 NIL NIL NIL)(\"MESSAGE\" \"DELIVERY-STATUS\" NIL NIL NIL \"7BIT\" 318 NIL NIL NIL)(\"MESSAGE\" \"RFC822\" NIL NIL NIL \"7BIT\" 2177 (\"Tue, 11 May 2010 18:28:16 -0400\" \"Re: Welcome letter\" ((\"David\" NIL \"info\" \"xxxxxxxx.si\")) ((\"David\" NIL \"info\" \"xxxxxxxx.si\")) ((\"David\" NIL \"info\" \"xxxxxxxx.si\")) ((\"Doretha\" NIL \"doretha.info\" \"xxxxxxxx.si\")) NIL NIL \"<AC1D15E06EA82F47BDE18E851CC32F330717704E@localdomain>\" \"<AANLkTikKMev1I73L2E7XLjRs67IHrEkb23f7ZPmD4S_9@localdomain>\") (\"MIXED\" (\"BOUNDARY\" \"000e0cd29212e3e06a0486590ae2\") NIL NIL) 37 NIL NIL NIL) \"REPORT\" (\"BOUNDARY\" \"16DuG.4XbaNOvCi.9ggvq.8Ipnyp3\" \"REPORT-TYPE\" \"delivery-status\") NIL NIL))\r\n")
empty_part = response.data.attr['BODYSTRUCTURE'].parts[2]
assert_equal(empty_part.lines, 37)
assert_equal(empty_part.body.media_type, 'MULTIPART')
assert_equal(empty_part.body.subtype, 'MIXED')
assert_equal(empty_part.body.param['BOUNDARY'], '000e0cd29212e3e06a0486590ae2')
end
end

0 comments on commit 87505dd

Please sign in to comment.