ruby-gmail 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ === 0.0.7 / 2009-12-23
2
+
3
+ * 1 bugfix
4
+
5
+ * Improved multipart message parsing reliability
6
+
1
7
  === 0.0.6 / 2009-12-21
2
8
 
3
9
  * 1 bugfix
data/lib/gmail.rb CHANGED
@@ -3,7 +3,7 @@ require 'net/smtp'
3
3
  require 'smtp_tls'
4
4
 
5
5
  class Gmail
6
- VERSION = '0.0.6'
6
+ VERSION = '0.0.7'
7
7
 
8
8
  class NoLabel < RuntimeError; end
9
9
 
data/lib/ietf/rfc2045.rb CHANGED
@@ -4,10 +4,10 @@ module IETF
4
4
  def self.parse_rfc2045_from(raw)
5
5
  headers, raw = IETF::RFC822.parse_rfc822_from(raw)
6
6
 
7
- if headers['content-type'] =~ /multipart\/(\w+); boundary=([\"\']?)(.*)\2/
7
+ if headers['content-type'] =~ /multipart\/(\w+); boundary=([\"\']?)(.*)\2?/
8
8
  content = {}
9
9
  content[:type] = $1
10
- content[:boundary] = $2
10
+ content[:boundary] = $3
11
11
  content[:content] = IETF::RFC2045.parse_rfc2045_content_from(raw, content[:boundary])
12
12
  else
13
13
  content = raw
@@ -17,9 +17,11 @@ module IETF
17
17
  end
18
18
 
19
19
  def self.parse_rfc2045_content_from(raw, boundary)
20
- parts = raw.split(/#{CRLF.source}--#{boundary}(?:--)?(?:#{CRLF.source}|$)/)
20
+ parts = ("\r\n" + raw).split(/#{CRLF.source}--#{boundary}(?:--)?(?:#{CRLF.source}|$)/)
21
21
  parts.reject! {|p| p.gsub(/^[ \r\n#{HTAB}]?$/,'') == ''} # Remove any parts that are blank
22
+ puts "[RFC2045] PARTS:\n\t#{parts.map {|p| p.gsub(/\n/,"\n\t")}.join("\n---\n\t")}" if $DEBUG
22
23
  parts.collect {|part|
24
+ puts "[RFC2045] Parsing PART with boundary #{boundary.inspect}:\n\t#{part.gsub(/\n/,"\n\t")}" if $DEBUG
23
25
  IETF::RFC2045.parse_rfc2045_from(part)
24
26
  }
25
27
  end
data/lib/ietf/rfc822.rb CHANGED
@@ -12,6 +12,7 @@ module IETF
12
12
  headers = {}
13
13
  # Parse out rfc822 (headers)
14
14
  head, remaining_raw = raw.split(/#{CRLF.source}#{CRLF.source}/,2)
15
+ puts "[RFC822] HEAD found:\n\t#{head.gsub(/\n/,"\n\t")}" if $DEBUG
15
16
  head.scan(FIELD) do |field_name, field_body|
16
17
  headers[field_name.downcase] = field_body
17
18
  end
data/lib/mime/entity.rb CHANGED
@@ -12,7 +12,7 @@ module MIME
12
12
  class Entity
13
13
  def initialize(arg=nil)
14
14
  if arg.is_a?(String)
15
- @raw = arg.gsub(/\r\r+/, "\r").gsub(/([^\r])\n/, "\\1\r\n") # normalizes end-of-line characters
15
+ @raw = arg.gsub(/\r/,'').gsub(/\n/, "\r\n") # normalizes end-of-line characters
16
16
  from_parsed(IETF::RFC2045.parse_rfc2045_from(@raw))
17
17
  elsif arg.is_a?(Hash)
18
18
  @headers = arg
@@ -39,16 +39,17 @@ module MIME
39
39
  if parsed[1].is_a?(Hash)
40
40
  @multipart_type = parsed[1][:type]
41
41
  @multipart_boundary = parsed[1][:boundary]
42
+ raise "IETF PARSING FAIL! (empty boundary)" if @multipart_boundary == ''
42
43
  end
43
44
  else
44
- raise "IETF PARSING FAIL!"
45
+ raise "IETF PARSING FAIL! ('A' structure)"
45
46
  end
46
47
  return self
47
48
  when Hash
48
49
  if parsed.has_key?(:type) && parsed.has_key?(:boundary) && parsed.has_key?(:content)
49
50
  @content = parsed[:content].is_a?(Array) ? parsed[:content].collect {|p| Entity.new.from_parsed(p)} : parsed[:content]
50
51
  else
51
- raise "IETF PARSING FAIL!"
52
+ raise "IETF PARSING FAIL! ('H' structure)"
52
53
  end
53
54
  return self
54
55
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-gmail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Parker
@@ -30,7 +30,7 @@ cert_chain:
30
30
  teST6sOe8lUhZQ==
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2009-12-21 00:00:00 -05:00
33
+ date: 2009-12-23 00:00:00 -05:00
34
34
  default_executable:
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
metadata.gz.sig CHANGED
Binary file