mail 2.6.6 → 2.7.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +25 -6
  3. data/Dependencies.txt +0 -1
  4. data/Gemfile +5 -8
  5. data/MIT-LICENSE +1 -1
  6. data/README.md +22 -11
  7. data/Rakefile +0 -6
  8. data/lib/mail.rb +2 -10
  9. data/lib/mail/attachments_list.rb +3 -2
  10. data/lib/mail/body.rb +3 -3
  11. data/lib/mail/core_extensions/smtp.rb +19 -16
  12. data/lib/mail/core_extensions/string.rb +0 -4
  13. data/lib/mail/elements/address.rb +9 -4
  14. data/lib/mail/elements/address_list.rb +10 -18
  15. data/lib/mail/elements/content_disposition_element.rb +8 -15
  16. data/lib/mail/elements/content_location_element.rb +5 -10
  17. data/lib/mail/elements/content_transfer_encoding_element.rb +5 -10
  18. data/lib/mail/elements/content_type_element.rb +8 -19
  19. data/lib/mail/elements/date_time_element.rb +6 -14
  20. data/lib/mail/elements/envelope_from_element.rb +14 -21
  21. data/lib/mail/elements/message_ids_element.rb +8 -12
  22. data/lib/mail/elements/mime_version_element.rb +6 -14
  23. data/lib/mail/elements/phrase_list.rb +6 -9
  24. data/lib/mail/elements/received_element.rb +9 -15
  25. data/lib/mail/encodings.rb +12 -14
  26. data/lib/mail/field.rb +7 -4
  27. data/lib/mail/fields/common/parameter_hash.rb +1 -1
  28. data/lib/mail/fields/content_type_field.rb +2 -7
  29. data/lib/mail/fields/unstructured_field.rb +2 -2
  30. data/lib/mail/header.rb +1 -0
  31. data/lib/mail/message.rb +23 -25
  32. data/lib/mail/multibyte.rb +51 -0
  33. data/lib/mail/multibyte/chars.rb +27 -27
  34. data/lib/mail/network/delivery_methods/exim.rb +10 -6
  35. data/lib/mail/network/delivery_methods/sendmail.rb +2 -6
  36. data/lib/mail/network/delivery_methods/smtp.rb +14 -6
  37. data/lib/mail/parsers.rb +16 -24
  38. data/lib/mail/parsers/address_lists_parser.rb +15321 -112
  39. data/lib/mail/parsers/address_lists_parser.rl +166 -0
  40. data/lib/mail/parsers/content_disposition_parser.rb +698 -55
  41. data/lib/mail/parsers/content_disposition_parser.rl +76 -0
  42. data/lib/mail/parsers/content_location_parser.rb +565 -23
  43. data/lib/mail/parsers/content_location_parser.rl +65 -0
  44. data/lib/mail/parsers/content_transfer_encoding_parser.rb +410 -22
  45. data/lib/mail/parsers/content_transfer_encoding_parser.rl +58 -0
  46. data/lib/mail/parsers/content_type_parser.rb +841 -54
  47. data/lib/mail/parsers/content_type_parser.rl +77 -0
  48. data/lib/mail/parsers/date_time_parser.rb +773 -26
  49. data/lib/mail/parsers/date_time_parser.rl +56 -0
  50. data/lib/mail/parsers/envelope_from_parser.rb +2051 -36
  51. data/lib/mail/parsers/envelope_from_parser.rl +76 -0
  52. data/lib/mail/parsers/message_ids_parser.rb +1494 -25
  53. data/lib/mail/parsers/message_ids_parser.rl +76 -0
  54. data/lib/mail/parsers/mime_version_parser.rb +393 -26
  55. data/lib/mail/parsers/mime_version_parser.rl +55 -0
  56. data/lib/mail/parsers/phrase_lists_parser.rb +529 -19
  57. data/lib/mail/parsers/phrase_lists_parser.rl +77 -0
  58. data/lib/mail/parsers/received_parser.rb +4711 -38
  59. data/lib/mail/parsers/received_parser.rl +78 -0
  60. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +12 -0
  61. data/lib/mail/parsers/rfc2045_content_type.rl +24 -0
  62. data/lib/mail/parsers/rfc2045_mime.rl +15 -0
  63. data/lib/mail/parsers/rfc2183_content_disposition.rl +14 -0
  64. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +16 -0
  65. data/lib/mail/parsers/rfc5322.rl +57 -0
  66. data/lib/mail/parsers/rfc5322_address.rl +70 -0
  67. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +7 -1
  68. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +56 -0
  69. data/lib/mail/part.rb +1 -1
  70. data/lib/mail/parts_list.rb +5 -6
  71. data/lib/mail/utilities.rb +4 -2
  72. data/lib/mail/version.rb +3 -3
  73. data/lib/mail/version_specific/ruby_1_8.rb +28 -2
  74. data/lib/mail/version_specific/ruby_1_9.rb +48 -8
  75. metadata +28 -45
  76. data/lib/mail/core_extensions/string/access.rb +0 -146
  77. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  78. data/lib/mail/parsers/ragel.rb +0 -18
  79. data/lib/mail/parsers/ragel/common.rl +0 -185
  80. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  81. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  82. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  83. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  84. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  85. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  86. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  87. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  88. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  89. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  90. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  91. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  92. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  93. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  94. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  95. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  96. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  97. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  98. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  99. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  100. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  101. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  102. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  103. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  104. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  105. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+ require 'mail/utilities'
3
+
4
+ %%{
5
+ # RFC 5322 Section 3.6.4: Identification Fields
6
+ # https://tools.ietf.org/html/rfc5322#section-3.6.4
7
+ machine message_ids;
8
+
9
+ # Message Ids
10
+ action msg_id_s { msg_id_s = p }
11
+ action msg_id_e { message_ids.message_ids << data[msg_id_s..(p-1)].rstrip }
12
+
13
+ # No-op actions
14
+ action angle_addr_s {}
15
+ action address_s {}
16
+ action address_e {}
17
+ action comment_e {}
18
+ action comment_s {}
19
+ action domain_e {}
20
+ action domain_s {}
21
+ action local_dot_atom_e {}
22
+ action local_dot_atom_pre_comment_e {}
23
+ action local_dot_atom_pre_comment_s {}
24
+ action local_dot_atom_s {}
25
+ action phrase_s {}
26
+ action phrase_e {}
27
+ action qstr_e {}
28
+ action qstr_s {}
29
+ action ctime_date_s {}
30
+ action ctime_date_e {}
31
+ action date_s {}
32
+ action date_e {}
33
+ action time_s {}
34
+ action time_e {}
35
+ action local_quoted_string_s {}
36
+ action local_quoted_string_e {}
37
+ action obs_domain_list_s {}
38
+ action obs_domain_list_e {}
39
+ action group_name_s {}
40
+ action group_name_e {}
41
+ action received_tokens_s {}
42
+ action received_tokens_e {}
43
+
44
+ include rfc5322 "rfc5322.rl";
45
+ main := message_ids;
46
+ }%%
47
+
48
+ module Mail::Parsers
49
+ module MessageIdsParser
50
+ MessageIdsStruct = Struct.new(:message_ids, :error)
51
+
52
+ %%write data noprefix;
53
+
54
+ def self.parse(data)
55
+ raise Mail::Field::ParseError.new(Mail::MessageIdsElement, data, 'nil is invalid') if data.nil?
56
+
57
+ # Parser state
58
+ message_ids = MessageIdsStruct.new([])
59
+ msg_id_s = nil
60
+
61
+ # 5.1 Variables Used by Ragel
62
+ p = 0
63
+ eof = pe = data.length
64
+ stack = []
65
+
66
+ %%write init;
67
+ %%write exec;
68
+
69
+ if p != eof || cs < %%{ write first_final; }%%
70
+ raise Mail::Field::ParseError.new(Mail::MessageIdsElement, data, "Only able to parse up to #{data[0..p]}")
71
+ end
72
+
73
+ message_ids
74
+ end
75
+ end
76
+ end
@@ -1,41 +1,408 @@
1
+
1
2
  # frozen_string_literal: true
3
+ require 'mail/utilities'
4
+
5
+
6
+
7
+
2
8
  module Mail::Parsers
3
- class MimeVersionParser
4
- include Mail::Utilities
9
+ module MimeVersionParser
10
+ MimeVersionStruct = Struct.new(:major, :minor, :error)
5
11
 
6
- def parse(s)
7
- if Mail::Utilities.blank?(s)
8
- return MimeVersionStruct.new("", nil)
9
- end
12
+
13
+ class << self
14
+ attr_accessor :_trans_keys
15
+ private :_trans_keys, :_trans_keys=
16
+ end
17
+ self._trans_keys = [
18
+ 0, 0, 9, 57, 10, 10,
19
+ 9, 32, 9, 57, 40,
20
+ 57, 46, 46, 40, 57,
21
+ 48, 57, 10, 10, 9, 32,
22
+ 1, 127, 1, 127, 10,
23
+ 10, 9, 32, 0, 127,
24
+ 9, 57, 9, 40, 9, 40,
25
+ 0, 0, 0
26
+ ]
10
27
 
11
- mime_version = MimeVersionStruct.new
28
+ class << self
29
+ attr_accessor :_key_spans
30
+ private :_key_spans, :_key_spans=
31
+ end
32
+ self._key_spans = [
33
+ 0, 49, 1, 24, 49, 18, 1, 18,
34
+ 10, 1, 24, 127, 127, 1, 24, 128,
35
+ 49, 32, 32, 0
36
+ ]
12
37
 
13
- actions, error = Ragel.parse(:mime_version, s)
14
- if error
15
- raise Mail::Field::ParseError.new(Mail::MimeVersionElement, s, error)
16
- end
38
+ class << self
39
+ attr_accessor :_index_offsets
40
+ private :_index_offsets, :_index_offsets=
41
+ end
42
+ self._index_offsets = [
43
+ 0, 0, 50, 52, 77, 127, 146, 148,
44
+ 167, 178, 180, 205, 333, 461, 463, 488,
45
+ 617, 667, 700, 733
46
+ ]
17
47
 
48
+ class << self
49
+ attr_accessor :_indicies
50
+ private :_indicies, :_indicies=
51
+ end
52
+ self._indicies = [
53
+ 0, 1, 1, 1, 2, 1, 1, 1,
54
+ 1, 1, 1, 1, 1, 1, 1, 1,
55
+ 1, 1, 1, 1, 1, 1, 1, 0,
56
+ 1, 1, 1, 1, 1, 1, 1, 3,
57
+ 1, 1, 1, 1, 1, 1, 1, 4,
58
+ 4, 4, 4, 4, 4, 4, 4, 4,
59
+ 4, 1, 5, 1, 0, 1, 1, 1,
60
+ 1, 1, 1, 1, 1, 1, 1, 1,
61
+ 1, 1, 1, 1, 1, 1, 1, 1,
62
+ 1, 1, 1, 0, 1, 6, 1, 1,
63
+ 1, 7, 1, 1, 1, 1, 1, 1,
64
+ 1, 1, 1, 1, 1, 1, 1, 1,
65
+ 1, 1, 1, 1, 6, 1, 1, 1,
66
+ 1, 1, 1, 1, 8, 1, 1, 1,
67
+ 1, 1, 1, 1, 9, 9, 9, 9,
68
+ 9, 9, 9, 9, 9, 9, 1, 10,
69
+ 1, 1, 1, 1, 1, 11, 1, 12,
70
+ 12, 12, 12, 12, 12, 12, 12, 12,
71
+ 12, 1, 13, 1, 14, 1, 1, 1,
72
+ 1, 1, 1, 1, 15, 15, 15, 15,
73
+ 15, 15, 15, 15, 15, 15, 1, 16,
74
+ 16, 16, 16, 16, 16, 16, 16, 16,
75
+ 16, 1, 17, 1, 18, 1, 1, 1,
76
+ 1, 1, 1, 1, 1, 1, 1, 1,
77
+ 1, 1, 1, 1, 1, 1, 1, 1,
78
+ 1, 1, 1, 18, 1, 19, 19, 19,
79
+ 19, 19, 19, 19, 19, 19, 1, 19,
80
+ 19, 20, 19, 19, 19, 19, 19, 19,
81
+ 19, 19, 19, 19, 19, 19, 19, 19,
82
+ 19, 19, 19, 19, 19, 19, 19, 19,
83
+ 19, 19, 19, 19, 21, 22, 19, 19,
84
+ 19, 19, 19, 19, 19, 19, 19, 19,
85
+ 19, 19, 19, 19, 19, 19, 19, 19,
86
+ 19, 19, 19, 19, 19, 19, 19, 19,
87
+ 19, 19, 19, 19, 19, 19, 19, 19,
88
+ 19, 19, 19, 19, 19, 19, 19, 19,
89
+ 19, 19, 19, 19, 19, 19, 19, 19,
90
+ 23, 19, 19, 19, 19, 19, 19, 19,
91
+ 19, 19, 19, 19, 19, 19, 19, 19,
92
+ 19, 19, 19, 19, 19, 19, 19, 19,
93
+ 19, 19, 19, 19, 19, 19, 19, 19,
94
+ 19, 19, 19, 19, 1, 24, 24, 24,
95
+ 24, 24, 24, 24, 24, 24, 1, 24,
96
+ 24, 25, 24, 24, 24, 24, 24, 24,
97
+ 24, 24, 24, 24, 24, 24, 24, 24,
98
+ 24, 24, 24, 24, 24, 24, 24, 24,
99
+ 24, 24, 24, 24, 26, 27, 24, 24,
100
+ 24, 24, 24, 24, 24, 24, 24, 24,
101
+ 24, 24, 24, 24, 24, 24, 24, 24,
102
+ 24, 24, 24, 24, 24, 24, 24, 24,
103
+ 24, 24, 24, 24, 24, 24, 24, 24,
104
+ 24, 24, 24, 24, 24, 24, 24, 24,
105
+ 24, 24, 24, 24, 24, 24, 24, 24,
106
+ 28, 24, 24, 24, 24, 24, 24, 24,
107
+ 24, 24, 24, 24, 24, 24, 24, 24,
108
+ 24, 24, 24, 24, 24, 24, 24, 24,
109
+ 24, 24, 24, 24, 24, 24, 24, 24,
110
+ 24, 24, 24, 24, 1, 29, 1, 24,
111
+ 1, 1, 1, 1, 1, 1, 1, 1,
112
+ 1, 1, 1, 1, 1, 1, 1, 1,
113
+ 1, 1, 1, 1, 1, 1, 24, 1,
114
+ 24, 24, 24, 24, 24, 24, 24, 24,
115
+ 24, 24, 24, 24, 24, 24, 24, 24,
116
+ 24, 24, 24, 24, 24, 24, 24, 24,
117
+ 24, 24, 24, 24, 24, 24, 24, 24,
118
+ 24, 24, 24, 24, 24, 24, 24, 24,
119
+ 24, 24, 24, 24, 24, 24, 24, 24,
120
+ 24, 24, 24, 24, 24, 24, 24, 24,
121
+ 24, 24, 24, 24, 24, 24, 24, 24,
122
+ 24, 24, 24, 24, 24, 24, 24, 24,
123
+ 24, 24, 24, 24, 24, 24, 24, 24,
124
+ 24, 24, 24, 24, 24, 24, 24, 24,
125
+ 24, 24, 24, 24, 24, 24, 24, 24,
126
+ 24, 24, 24, 24, 24, 24, 24, 24,
127
+ 24, 24, 24, 24, 24, 24, 24, 24,
128
+ 24, 24, 24, 24, 24, 24, 24, 24,
129
+ 24, 24, 24, 24, 24, 24, 24, 24,
130
+ 1, 30, 1, 1, 1, 31, 1, 1,
131
+ 1, 1, 1, 1, 1, 1, 1, 1,
132
+ 1, 1, 1, 1, 1, 1, 1, 1,
133
+ 30, 1, 1, 1, 1, 1, 1, 1,
134
+ 32, 1, 1, 1, 1, 1, 1, 1,
135
+ 33, 33, 33, 33, 33, 33, 33, 33,
136
+ 33, 33, 1, 18, 1, 1, 1, 34,
137
+ 1, 1, 1, 1, 1, 1, 1, 1,
138
+ 1, 1, 1, 1, 1, 1, 1, 1,
139
+ 1, 1, 18, 1, 1, 1, 1, 1,
140
+ 1, 1, 35, 1, 36, 1, 1, 1,
141
+ 37, 1, 1, 1, 1, 1, 1, 1,
142
+ 1, 1, 1, 1, 1, 1, 1, 1,
143
+ 1, 1, 1, 36, 1, 1, 1, 1,
144
+ 1, 1, 1, 38, 1, 1, 0
145
+ ]
146
+
147
+ class << self
148
+ attr_accessor :_trans_targs
149
+ private :_trans_targs, :_trans_targs=
150
+ end
151
+ self._trans_targs = [
152
+ 1, 0, 2, 4, 5, 3, 1, 2,
153
+ 4, 5, 6, 7, 5, 7, 8, 16,
154
+ 16, 10, 17, 12, 13, 12, 19, 15,
155
+ 12, 13, 12, 19, 15, 14, 17, 9,
156
+ 18, 16, 9, 18, 17, 9, 18
157
+ ]
158
+
159
+ class << self
160
+ attr_accessor :_trans_actions
161
+ private :_trans_actions, :_trans_actions=
162
+ end
163
+ self._trans_actions = [
164
+ 0, 0, 0, 1, 2, 0, 3, 3,
165
+ 4, 5, 6, 7, 0, 3, 1, 8,
166
+ 9, 0, 0, 10, 10, 11, 12, 10,
167
+ 0, 0, 1, 13, 0, 0, 14, 14,
168
+ 15, 0, 0, 1, 3, 3, 4
169
+ ]
170
+
171
+ class << self
172
+ attr_accessor :_eof_actions
173
+ private :_eof_actions, :_eof_actions=
174
+ end
175
+ self._eof_actions = [
176
+ 0, 0, 0, 0, 0, 0, 0, 0,
177
+ 0, 0, 0, 0, 0, 0, 0, 0,
178
+ 14, 0, 3, 0
179
+ ]
180
+
181
+ class << self
182
+ attr_accessor :start
183
+ end
184
+ self.start = 1;
185
+ class << self
186
+ attr_accessor :first_final
187
+ end
188
+ self.first_final = 16;
189
+ class << self
190
+ attr_accessor :error
191
+ end
192
+ self.error = 0;
193
+
194
+ class << self
195
+ attr_accessor :en_comment_tail
196
+ end
197
+ self.en_comment_tail = 11;
198
+ class << self
199
+ attr_accessor :en_main
200
+ end
201
+ self.en_main = 1;
202
+
203
+
204
+
205
+ def self.parse(data)
206
+ return MimeVersionStruct.new('', nil) if Mail::Utilities.blank?(data)
207
+
208
+ # Parser state
209
+ mime_version = MimeVersionStruct.new
18
210
  major_digits_s = minor_digits_s = nil
19
- actions.each_slice(2) do |action_id, p|
20
- action = Mail::Parsers::Ragel::ACTIONS[action_id]
21
- case action
22
211
 
23
- # Major Digits
24
- when :major_digits_s then major_digits_s = p
25
- when :major_digits_e
26
- mime_version.major = s[major_digits_s..(p-1)]
212
+ # 5.1 Variables Used by Ragel
213
+ p = 0
214
+ eof = pe = data.length
215
+ stack = []
216
+
217
+
218
+ begin
219
+ p ||= 0
220
+ pe ||= data.length
221
+ cs = start
222
+ top = 0
223
+ end
224
+
225
+
226
+ begin
227
+ testEof = false
228
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
229
+ _goto_level = 0
230
+ _resume = 10
231
+ _eof_trans = 15
232
+ _again = 20
233
+ _test_eof = 30
234
+ _out = 40
235
+ while true
236
+ if _goto_level <= 0
237
+ if p == pe
238
+ _goto_level = _test_eof
239
+ next
240
+ end
241
+ if cs == 0
242
+ _goto_level = _out
243
+ next
244
+ end
245
+ end
246
+ if _goto_level <= _resume
247
+ _keys = cs << 1
248
+ _inds = _index_offsets[cs]
249
+ _slen = _key_spans[cs]
250
+ _wide = data[p].ord
251
+ _trans = if ( _slen > 0 &&
252
+ _trans_keys[_keys] <= _wide &&
253
+ _wide <= _trans_keys[_keys + 1]
254
+ ) then
255
+ _indicies[ _inds + _wide - _trans_keys[_keys] ]
256
+ else
257
+ _indicies[ _inds + _slen ]
258
+ end
259
+ cs = _trans_targs[_trans]
260
+ if _trans_actions[_trans] != 0
261
+ case _trans_actions[_trans]
262
+ when 2 then
263
+ begin
264
+ major_digits_s = p end
265
+ when 7 then
266
+ begin
267
+ mime_version.major = data[major_digits_s..(p-1)] end
268
+ when 8 then
269
+ begin
270
+ minor_digits_s = p end
271
+ when 14 then
272
+ begin
273
+ mime_version.minor = data[minor_digits_s..(p-1)] end
274
+ when 10 then
275
+ begin
276
+ end
277
+ when 3 then
278
+ begin
279
+ end
280
+ when 1 then
281
+ begin
282
+ begin
283
+ stack[top] = cs
284
+ top+= 1
285
+ cs = 11
286
+ _goto_level = _again
287
+ next
288
+ end
289
+ end
290
+ when 13 then
291
+ begin
292
+ begin
293
+ top -= 1
294
+ cs = stack[top]
295
+ _goto_level = _again
296
+ next
297
+ end
298
+ end
299
+ when 6 then
300
+ begin
301
+ mime_version.major = data[major_digits_s..(p-1)] end
302
+ begin
303
+ begin
304
+ stack[top] = cs
305
+ top+= 1
306
+ cs = 11
307
+ _goto_level = _again
308
+ next
309
+ end
310
+ end
311
+ when 15 then
312
+ begin
313
+ mime_version.minor = data[minor_digits_s..(p-1)] end
314
+ begin
315
+ begin
316
+ stack[top] = cs
317
+ top+= 1
318
+ cs = 11
319
+ _goto_level = _again
320
+ next
321
+ end
322
+ end
323
+ when 11 then
324
+ begin
325
+ end
326
+ begin
327
+ begin
328
+ stack[top] = cs
329
+ top+= 1
330
+ cs = 11
331
+ _goto_level = _again
332
+ next
333
+ end
334
+ end
335
+ when 12 then
336
+ begin
337
+ end
338
+ begin
339
+ begin
340
+ top -= 1
341
+ cs = stack[top]
342
+ _goto_level = _again
343
+ next
344
+ end
345
+ end
346
+ when 5 then
347
+ begin
348
+ end
349
+ begin
350
+ major_digits_s = p end
351
+ when 9 then
352
+ begin
353
+ end
354
+ begin
355
+ minor_digits_s = p end
356
+ when 4 then
357
+ begin
358
+ end
359
+ begin
360
+ begin
361
+ stack[top] = cs
362
+ top+= 1
363
+ cs = 11
364
+ _goto_level = _again
365
+ next
366
+ end
367
+ end
368
+ end
369
+ end
370
+ end
371
+ if _goto_level <= _again
372
+ if cs == 0
373
+ _goto_level = _out
374
+ next
375
+ end
376
+ p += 1
377
+ if p != pe
378
+ _goto_level = _resume
379
+ next
380
+ end
381
+ end
382
+ if _goto_level <= _test_eof
383
+ if p == eof
384
+ case _eof_actions[cs]
385
+ when 14 then
386
+ begin
387
+ mime_version.minor = data[minor_digits_s..(p-1)] end
388
+ when 3 then
389
+ begin
390
+ end
391
+ end
392
+ end
27
393
 
28
- # Minor Digits
29
- when :minor_digits_s then minor_digits_s = p
30
- when :minor_digits_e
31
- mime_version.minor = s[minor_digits_s..(p-1)]
394
+ end
395
+ if _goto_level <= _out
396
+ break
397
+ end
398
+ end
399
+ end
32
400
 
33
- when :comment_e, :comment_s then nil
34
401
 
35
- else
36
- raise Mail::Field::ParseError.new(Mail::MimeVersionElement, s, "Failed to process unknown action: #{action}")
37
- end
402
+ if p != eof || cs < 16
403
+ raise Mail::Field::ParseError.new(Mail::MimeVersionElement, data, "Only able to parse up to #{data[0..p]}")
38
404
  end
405
+
39
406
  mime_version
40
407
  end
41
408
  end