mail 2.6.4 → 2.7.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +35 -0
  3. data/Dependencies.txt +0 -1
  4. data/Gemfile +7 -7
  5. data/README.md +8 -5
  6. data/Rakefile +0 -6
  7. data/lib/mail/attachments_list.rb +4 -3
  8. data/lib/mail/body.rb +3 -3
  9. data/lib/mail/check_delivery_params.rb +47 -10
  10. data/lib/mail/core_extensions/smtp.rb +19 -16
  11. data/lib/mail/core_extensions/string.rb +0 -4
  12. data/lib/mail/elements/address.rb +18 -8
  13. data/lib/mail/elements/address_list.rb +10 -18
  14. data/lib/mail/elements/content_disposition_element.rb +8 -15
  15. data/lib/mail/elements/content_location_element.rb +5 -10
  16. data/lib/mail/elements/content_transfer_encoding_element.rb +5 -10
  17. data/lib/mail/elements/content_type_element.rb +8 -19
  18. data/lib/mail/elements/date_time_element.rb +6 -14
  19. data/lib/mail/elements/envelope_from_element.rb +14 -21
  20. data/lib/mail/elements/message_ids_element.rb +8 -12
  21. data/lib/mail/elements/mime_version_element.rb +6 -14
  22. data/lib/mail/elements/phrase_list.rb +6 -9
  23. data/lib/mail/elements/received_element.rb +9 -15
  24. data/lib/mail/encodings.rb +12 -14
  25. data/lib/mail/field.rb +7 -4
  26. data/lib/mail/fields/common/address_container.rb +2 -2
  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/chars.rb +29 -29
  33. data/lib/mail/multibyte.rb +51 -0
  34. data/lib/mail/network/delivery_methods/file_delivery.rb +4 -8
  35. data/lib/mail/network/delivery_methods/sendmail.rb +2 -4
  36. data/lib/mail/network/delivery_methods/smtp.rb +16 -11
  37. data/lib/mail/network/delivery_methods/smtp_connection.rb +2 -6
  38. data/lib/mail/network/delivery_methods/test_mailer.rb +5 -8
  39. data/lib/mail/network/retriever_methods/test_retriever.rb +1 -1
  40. data/lib/mail/parsers/address_lists_parser.rb +15321 -112
  41. data/lib/mail/parsers/address_lists_parser.rl +166 -0
  42. data/lib/mail/parsers/content_disposition_parser.rb +698 -55
  43. data/lib/mail/parsers/content_disposition_parser.rl +76 -0
  44. data/lib/mail/parsers/content_location_parser.rb +565 -23
  45. data/lib/mail/parsers/content_location_parser.rl +65 -0
  46. data/lib/mail/parsers/content_transfer_encoding_parser.rb +410 -22
  47. data/lib/mail/parsers/content_transfer_encoding_parser.rl +58 -0
  48. data/lib/mail/parsers/content_type_parser.rb +841 -54
  49. data/lib/mail/parsers/content_type_parser.rl +77 -0
  50. data/lib/mail/parsers/date_time_parser.rb +773 -26
  51. data/lib/mail/parsers/date_time_parser.rl +56 -0
  52. data/lib/mail/parsers/envelope_from_parser.rb +2051 -36
  53. data/lib/mail/parsers/envelope_from_parser.rl +76 -0
  54. data/lib/mail/parsers/message_ids_parser.rb +1494 -25
  55. data/lib/mail/parsers/message_ids_parser.rl +76 -0
  56. data/lib/mail/parsers/mime_version_parser.rb +393 -26
  57. data/lib/mail/parsers/mime_version_parser.rl +55 -0
  58. data/lib/mail/parsers/phrase_lists_parser.rb +529 -19
  59. data/lib/mail/parsers/phrase_lists_parser.rl +77 -0
  60. data/lib/mail/parsers/received_parser.rb +4711 -38
  61. data/lib/mail/parsers/received_parser.rl +78 -0
  62. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +12 -0
  63. data/lib/mail/parsers/rfc2045_content_type.rl +24 -0
  64. data/lib/mail/parsers/rfc2045_mime.rl +15 -0
  65. data/lib/mail/parsers/rfc2183_content_disposition.rl +14 -0
  66. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +16 -0
  67. data/lib/mail/parsers/rfc5322.rl +57 -0
  68. data/lib/mail/parsers/rfc5322_address.rl +70 -0
  69. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +7 -1
  70. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +56 -0
  71. data/lib/mail/parsers.rb +16 -24
  72. data/lib/mail/part.rb +1 -1
  73. data/lib/mail/parts_list.rb +5 -6
  74. data/lib/mail/utilities.rb +19 -3
  75. data/lib/mail/version.rb +3 -3
  76. data/lib/mail/version_specific/ruby_1_8.rb +28 -2
  77. data/lib/mail/version_specific/ruby_1_9.rb +51 -8
  78. data/lib/mail.rb +2 -10
  79. metadata +28 -45
  80. data/lib/mail/core_extensions/string/access.rb +0 -146
  81. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  82. data/lib/mail/parsers/ragel/common.rl +0 -185
  83. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  84. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  85. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  86. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  87. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  88. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  89. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  90. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  91. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  92. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  93. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  94. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  95. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  96. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  97. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  98. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  99. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  100. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  101. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  102. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  103. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  104. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  105. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  106. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  107. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
  108. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  109. data/lib/mail/parsers/ragel.rb +0 -18
@@ -1,68 +1,711 @@
1
+
1
2
  # frozen_string_literal: true
3
+ require 'mail/utilities'
4
+
5
+
6
+
7
+
2
8
  module Mail::Parsers
3
- class ContentDispositionParser
4
- include Mail::Utilities
9
+ module ContentDispositionParser
10
+ ContentDispositionStruct = Struct.new(:disposition_type, :parameters, :error)
5
11
 
6
- def parse(s)
7
- content_disposition = ContentDispositionStruct.new("", nil)
8
- if Mail::Utilities.blank?(s)
9
- return content_disposition
10
- 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, 33, 126, 9, 126,
19
+ 10, 10, 9, 32, 33,
20
+ 126, 9, 126, 9, 40,
21
+ 10, 10, 9, 32, 1, 127,
22
+ 1, 127, 10, 10, 9,
23
+ 32, 10, 10, 9, 32,
24
+ -128, -1, 9, 40, 10, 10,
25
+ 9, 32, 9, 126, 1,
26
+ 127, 1, 127, 10, 10,
27
+ 9, 32, -128, -1, 33, 126,
28
+ 9, 59, 9, 59, 9,
29
+ 126, 9, 59, 9, 59,
30
+ 0, 0, 0
31
+ ]
11
32
 
12
- actions, error = Ragel.parse(:content_disposition, s)
13
- if error
14
- raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, error)
15
- end
33
+ class << self
34
+ attr_accessor :_key_spans
35
+ private :_key_spans, :_key_spans=
36
+ end
37
+ self._key_spans = [
38
+ 0, 94, 118, 1, 24, 94, 118, 32,
39
+ 1, 24, 127, 127, 1, 24, 1, 24,
40
+ 128, 32, 1, 24, 118, 127, 127, 1,
41
+ 24, 128, 94, 51, 51, 118, 51, 51,
42
+ 0
43
+ ]
16
44
 
17
- content_disposition.parameters = []
45
+ class << self
46
+ attr_accessor :_index_offsets
47
+ private :_index_offsets, :_index_offsets=
48
+ end
49
+ self._index_offsets = [
50
+ 0, 0, 95, 214, 216, 241, 336, 455,
51
+ 488, 490, 515, 643, 771, 773, 798, 800,
52
+ 825, 954, 987, 989, 1014, 1133, 1261, 1389,
53
+ 1391, 1416, 1545, 1640, 1692, 1744, 1863, 1915,
54
+ 1967
55
+ ]
56
+
57
+ class << self
58
+ attr_accessor :_indicies
59
+ private :_indicies, :_indicies=
60
+ end
61
+ self._indicies = [
62
+ 0, 0, 0, 0, 0, 0, 0, 1,
63
+ 1, 0, 0, 0, 0, 0, 1, 0,
64
+ 0, 0, 0, 0, 0, 0, 0, 0,
65
+ 0, 1, 1, 1, 1, 1, 1, 1,
66
+ 0, 0, 0, 0, 0, 0, 0, 0,
67
+ 0, 0, 0, 0, 0, 0, 0, 0,
68
+ 0, 0, 0, 0, 0, 0, 0, 0,
69
+ 0, 0, 1, 1, 1, 0, 0, 0,
70
+ 0, 0, 0, 0, 0, 0, 0, 0,
71
+ 0, 0, 0, 0, 0, 0, 0, 0,
72
+ 0, 0, 0, 0, 0, 0, 0, 0,
73
+ 0, 0, 0, 0, 0, 0, 1, 2,
74
+ 1, 1, 1, 3, 1, 1, 1, 1,
75
+ 1, 1, 1, 1, 1, 1, 1, 1,
76
+ 1, 1, 1, 1, 1, 1, 2, 4,
77
+ 4, 4, 4, 4, 4, 4, 5, 1,
78
+ 4, 4, 4, 4, 4, 1, 4, 4,
79
+ 4, 4, 4, 4, 4, 4, 4, 4,
80
+ 1, 1, 1, 1, 1, 1, 1, 4,
81
+ 4, 4, 4, 4, 4, 4, 4, 4,
82
+ 4, 4, 4, 4, 4, 4, 4, 4,
83
+ 4, 4, 4, 4, 4, 4, 4, 4,
84
+ 4, 1, 1, 1, 4, 4, 4, 4,
85
+ 4, 4, 4, 4, 4, 4, 4, 4,
86
+ 4, 4, 4, 4, 4, 4, 4, 4,
87
+ 4, 4, 4, 4, 4, 4, 4, 4,
88
+ 4, 4, 4, 4, 4, 1, 6, 1,
89
+ 2, 1, 1, 1, 1, 1, 1, 1,
90
+ 1, 1, 1, 1, 1, 1, 1, 1,
91
+ 1, 1, 1, 1, 1, 1, 1, 2,
92
+ 1, 7, 7, 7, 7, 7, 7, 7,
93
+ 1, 1, 7, 7, 7, 7, 7, 1,
94
+ 7, 7, 7, 7, 7, 7, 7, 7,
95
+ 7, 7, 1, 1, 1, 8, 1, 1,
96
+ 1, 7, 7, 7, 7, 7, 7, 7,
97
+ 7, 7, 7, 7, 7, 7, 7, 7,
98
+ 7, 7, 7, 7, 7, 7, 7, 7,
99
+ 7, 7, 7, 1, 1, 1, 7, 7,
100
+ 7, 7, 7, 7, 7, 7, 7, 7,
101
+ 7, 7, 7, 7, 7, 7, 7, 7,
102
+ 7, 7, 7, 7, 7, 7, 7, 7,
103
+ 7, 7, 7, 7, 7, 7, 7, 1,
104
+ 9, 1, 1, 1, 10, 1, 1, 1,
105
+ 1, 1, 1, 1, 1, 1, 1, 1,
106
+ 1, 1, 1, 1, 1, 1, 1, 9,
107
+ 11, 12, 11, 11, 11, 11, 11, 13,
108
+ 1, 11, 11, 11, 11, 11, 1, 11,
109
+ 11, 11, 11, 11, 11, 11, 11, 11,
110
+ 11, 1, 1, 1, 11, 1, 1, 1,
111
+ 11, 11, 11, 11, 11, 11, 11, 11,
112
+ 11, 11, 11, 11, 11, 11, 11, 11,
113
+ 11, 11, 11, 11, 11, 11, 11, 11,
114
+ 11, 11, 1, 1, 1, 11, 11, 11,
115
+ 11, 11, 11, 11, 11, 11, 11, 11,
116
+ 11, 11, 11, 11, 11, 11, 11, 11,
117
+ 11, 11, 11, 11, 11, 11, 11, 11,
118
+ 11, 11, 11, 11, 11, 11, 1, 14,
119
+ 1, 1, 1, 15, 1, 1, 1, 1,
120
+ 1, 1, 1, 1, 1, 1, 1, 1,
121
+ 1, 1, 1, 1, 1, 1, 14, 1,
122
+ 16, 1, 1, 1, 1, 1, 17, 1,
123
+ 18, 1, 14, 1, 1, 1, 1, 1,
124
+ 1, 1, 1, 1, 1, 1, 1, 1,
125
+ 1, 1, 1, 1, 1, 1, 1, 1,
126
+ 1, 14, 1, 19, 19, 19, 19, 19,
127
+ 19, 19, 19, 19, 1, 19, 19, 20,
128
+ 19, 19, 19, 19, 19, 19, 19, 19,
129
+ 19, 19, 19, 19, 19, 19, 19, 19,
130
+ 19, 19, 19, 19, 21, 19, 19, 19,
131
+ 19, 19, 19, 19, 19, 19, 19, 19,
132
+ 19, 19, 19, 19, 19, 19, 19, 19,
133
+ 19, 19, 19, 19, 19, 19, 19, 19,
134
+ 19, 19, 19, 19, 19, 19, 19, 19,
135
+ 19, 19, 19, 19, 19, 19, 19, 19,
136
+ 19, 19, 19, 19, 19, 19, 19, 19,
137
+ 19, 19, 19, 19, 19, 19, 22, 19,
138
+ 19, 19, 19, 19, 19, 19, 19, 19,
139
+ 19, 19, 19, 19, 19, 19, 19, 19,
140
+ 19, 19, 19, 19, 19, 19, 19, 19,
141
+ 19, 19, 19, 19, 19, 19, 19, 19,
142
+ 19, 19, 1, 23, 23, 23, 23, 23,
143
+ 23, 23, 23, 23, 1, 23, 23, 24,
144
+ 23, 23, 23, 23, 23, 23, 23, 23,
145
+ 23, 23, 23, 23, 23, 23, 23, 23,
146
+ 23, 23, 23, 23, 25, 23, 23, 23,
147
+ 23, 23, 23, 23, 23, 23, 23, 23,
148
+ 23, 23, 23, 23, 23, 23, 23, 23,
149
+ 23, 23, 23, 23, 23, 23, 23, 23,
150
+ 23, 23, 23, 23, 23, 23, 23, 23,
151
+ 23, 23, 23, 23, 23, 23, 23, 23,
152
+ 23, 23, 23, 23, 23, 23, 23, 23,
153
+ 23, 23, 23, 23, 23, 23, 26, 23,
154
+ 23, 23, 23, 23, 23, 23, 23, 23,
155
+ 23, 23, 23, 23, 23, 23, 23, 23,
156
+ 23, 23, 23, 23, 23, 23, 23, 23,
157
+ 23, 23, 23, 23, 23, 23, 23, 23,
158
+ 23, 23, 1, 27, 1, 23, 1, 1,
159
+ 1, 1, 1, 1, 1, 1, 1, 1,
160
+ 1, 1, 1, 1, 1, 1, 1, 1,
161
+ 1, 1, 1, 1, 23, 1, 28, 1,
162
+ 29, 1, 1, 1, 1, 1, 1, 1,
163
+ 1, 1, 1, 1, 1, 1, 1, 1,
164
+ 1, 1, 1, 1, 1, 1, 1, 29,
165
+ 1, 1, 1, 1, 1, 1, 1, 1,
166
+ 1, 1, 1, 1, 1, 1, 1, 1,
167
+ 1, 1, 1, 1, 1, 1, 1, 1,
168
+ 1, 1, 1, 1, 1, 1, 1, 1,
169
+ 1, 1, 1, 1, 1, 1, 1, 1,
170
+ 1, 1, 1, 1, 1, 1, 1, 1,
171
+ 1, 1, 1, 1, 1, 1, 1, 1,
172
+ 1, 1, 1, 1, 1, 1, 1, 1,
173
+ 1, 1, 1, 1, 1, 1, 1, 1,
174
+ 1, 1, 1, 1, 1, 1, 1, 1,
175
+ 1, 1, 1, 1, 1, 1, 1, 1,
176
+ 1, 1, 1, 1, 1, 1, 1, 1,
177
+ 1, 1, 1, 1, 1, 1, 1, 1,
178
+ 1, 1, 1, 1, 1, 1, 1, 1,
179
+ 1, 1, 1, 1, 1, 1, 1, 1,
180
+ 1, 1, 1, 1, 1, 1, 1, 1,
181
+ 1, 23, 30, 1, 1, 1, 31, 1,
182
+ 1, 1, 1, 1, 1, 1, 1, 1,
183
+ 1, 1, 1, 1, 1, 1, 1, 1,
184
+ 1, 30, 1, 32, 1, 1, 1, 1,
185
+ 1, 33, 1, 34, 1, 35, 1, 1,
186
+ 1, 1, 1, 1, 1, 1, 1, 1,
187
+ 1, 1, 1, 1, 1, 1, 1, 1,
188
+ 1, 1, 1, 1, 35, 1, 36, 1,
189
+ 1, 1, 37, 1, 1, 1, 1, 1,
190
+ 1, 1, 1, 1, 1, 1, 1, 1,
191
+ 1, 1, 1, 1, 1, 36, 38, 38,
192
+ 38, 38, 38, 38, 38, 39, 1, 38,
193
+ 38, 38, 38, 38, 1, 38, 38, 38,
194
+ 38, 38, 38, 38, 38, 38, 38, 1,
195
+ 1, 1, 1, 1, 1, 1, 38, 38,
196
+ 38, 38, 38, 38, 38, 38, 38, 38,
197
+ 38, 38, 38, 38, 38, 38, 38, 38,
198
+ 38, 38, 38, 38, 38, 38, 38, 38,
199
+ 1, 1, 1, 38, 38, 38, 38, 38,
200
+ 38, 38, 38, 38, 38, 38, 38, 38,
201
+ 38, 38, 38, 38, 38, 38, 38, 38,
202
+ 38, 38, 38, 38, 38, 38, 38, 38,
203
+ 38, 38, 38, 38, 1, 40, 40, 40,
204
+ 40, 40, 40, 40, 40, 40, 1, 40,
205
+ 40, 41, 40, 40, 40, 40, 40, 40,
206
+ 40, 40, 40, 40, 40, 40, 40, 40,
207
+ 40, 40, 40, 40, 40, 40, 40, 40,
208
+ 40, 40, 40, 40, 42, 43, 40, 40,
209
+ 40, 40, 40, 40, 40, 40, 40, 40,
210
+ 40, 40, 40, 40, 40, 40, 40, 40,
211
+ 40, 40, 40, 40, 40, 40, 40, 40,
212
+ 40, 40, 40, 40, 40, 40, 40, 40,
213
+ 40, 40, 40, 40, 40, 40, 40, 40,
214
+ 40, 40, 40, 40, 40, 40, 40, 40,
215
+ 44, 40, 40, 40, 40, 40, 40, 40,
216
+ 40, 40, 40, 40, 40, 40, 40, 40,
217
+ 40, 40, 40, 40, 40, 40, 40, 40,
218
+ 40, 40, 40, 40, 40, 40, 40, 40,
219
+ 40, 40, 40, 40, 1, 45, 45, 45,
220
+ 45, 45, 45, 45, 45, 45, 1, 45,
221
+ 45, 46, 45, 45, 45, 45, 45, 45,
222
+ 45, 45, 45, 45, 45, 45, 45, 45,
223
+ 45, 45, 45, 45, 45, 45, 45, 45,
224
+ 45, 45, 45, 45, 47, 48, 45, 45,
225
+ 45, 45, 45, 45, 45, 45, 45, 45,
226
+ 45, 45, 45, 45, 45, 45, 45, 45,
227
+ 45, 45, 45, 45, 45, 45, 45, 45,
228
+ 45, 45, 45, 45, 45, 45, 45, 45,
229
+ 45, 45, 45, 45, 45, 45, 45, 45,
230
+ 45, 45, 45, 45, 45, 45, 45, 45,
231
+ 49, 45, 45, 45, 45, 45, 45, 45,
232
+ 45, 45, 45, 45, 45, 45, 45, 45,
233
+ 45, 45, 45, 45, 45, 45, 45, 45,
234
+ 45, 45, 45, 45, 45, 45, 45, 45,
235
+ 45, 45, 45, 45, 1, 50, 1, 45,
236
+ 1, 1, 1, 1, 1, 1, 1, 1,
237
+ 1, 1, 1, 1, 1, 1, 1, 1,
238
+ 1, 1, 1, 1, 1, 1, 45, 1,
239
+ 1, 1, 1, 1, 1, 1, 1, 1,
240
+ 1, 1, 1, 1, 1, 1, 1, 1,
241
+ 1, 1, 1, 1, 1, 1, 1, 1,
242
+ 1, 1, 1, 1, 1, 1, 1, 1,
243
+ 1, 1, 1, 1, 1, 1, 1, 1,
244
+ 1, 1, 1, 1, 1, 1, 1, 1,
245
+ 1, 1, 1, 1, 1, 1, 1, 1,
246
+ 1, 1, 1, 1, 1, 1, 1, 1,
247
+ 1, 1, 1, 1, 1, 1, 1, 1,
248
+ 1, 1, 1, 1, 1, 1, 1, 1,
249
+ 1, 1, 1, 1, 1, 1, 1, 1,
250
+ 1, 1, 1, 1, 1, 1, 1, 1,
251
+ 1, 1, 1, 1, 1, 1, 1, 1,
252
+ 1, 1, 1, 1, 1, 1, 1, 1,
253
+ 1, 1, 1, 1, 1, 1, 1, 1,
254
+ 1, 1, 1, 1, 1, 1, 1, 1,
255
+ 45, 51, 51, 51, 51, 51, 51, 51,
256
+ 1, 1, 51, 51, 51, 51, 51, 1,
257
+ 51, 51, 51, 51, 51, 51, 51, 51,
258
+ 51, 51, 1, 52, 1, 1, 1, 1,
259
+ 1, 51, 51, 51, 51, 51, 51, 51,
260
+ 51, 51, 51, 51, 51, 51, 51, 51,
261
+ 51, 51, 51, 51, 51, 51, 51, 51,
262
+ 51, 51, 51, 1, 1, 1, 51, 51,
263
+ 51, 51, 51, 51, 51, 51, 51, 51,
264
+ 51, 51, 51, 51, 51, 51, 51, 51,
265
+ 51, 51, 51, 51, 51, 51, 51, 51,
266
+ 51, 51, 51, 51, 51, 51, 51, 1,
267
+ 53, 1, 1, 1, 54, 1, 1, 1,
268
+ 1, 1, 1, 1, 1, 1, 1, 1,
269
+ 1, 1, 1, 1, 1, 1, 1, 53,
270
+ 1, 1, 1, 1, 1, 1, 1, 55,
271
+ 1, 1, 1, 1, 1, 1, 1, 1,
272
+ 1, 1, 1, 1, 1, 1, 1, 1,
273
+ 1, 1, 56, 1, 57, 1, 1, 1,
274
+ 58, 1, 1, 1, 1, 1, 1, 1,
275
+ 1, 1, 1, 1, 1, 1, 1, 1,
276
+ 1, 1, 1, 57, 1, 1, 1, 1,
277
+ 1, 1, 1, 59, 1, 1, 1, 1,
278
+ 1, 1, 1, 1, 1, 1, 1, 1,
279
+ 1, 1, 1, 1, 1, 1, 60, 1,
280
+ 61, 1, 1, 1, 62, 1, 1, 1,
281
+ 1, 1, 1, 1, 1, 1, 1, 1,
282
+ 1, 1, 1, 1, 1, 1, 1, 61,
283
+ 63, 1, 63, 63, 63, 63, 63, 64,
284
+ 1, 63, 63, 63, 63, 63, 1, 63,
285
+ 63, 63, 63, 63, 63, 63, 63, 63,
286
+ 63, 1, 56, 1, 63, 1, 1, 1,
287
+ 63, 63, 63, 63, 63, 63, 63, 63,
288
+ 63, 63, 63, 63, 63, 63, 63, 63,
289
+ 63, 63, 63, 63, 63, 63, 63, 63,
290
+ 63, 63, 1, 1, 1, 63, 63, 63,
291
+ 63, 63, 63, 63, 63, 63, 63, 63,
292
+ 63, 63, 63, 63, 63, 63, 63, 63,
293
+ 63, 63, 63, 63, 63, 63, 63, 63,
294
+ 63, 63, 63, 63, 63, 63, 1, 35,
295
+ 1, 1, 1, 65, 1, 1, 1, 1,
296
+ 1, 1, 1, 1, 1, 1, 1, 1,
297
+ 1, 1, 1, 1, 1, 1, 35, 1,
298
+ 1, 1, 1, 1, 1, 1, 66, 1,
299
+ 1, 1, 1, 1, 1, 1, 1, 1,
300
+ 1, 1, 1, 1, 1, 1, 1, 1,
301
+ 1, 2, 1, 67, 1, 1, 1, 68,
302
+ 1, 1, 1, 1, 1, 1, 1, 1,
303
+ 1, 1, 1, 1, 1, 1, 1, 1,
304
+ 1, 1, 67, 1, 1, 1, 1, 1,
305
+ 1, 1, 69, 1, 1, 1, 1, 1,
306
+ 1, 1, 1, 1, 1, 1, 1, 1,
307
+ 1, 1, 1, 1, 1, 36, 1, 1,
308
+ 0
309
+ ]
310
+
311
+ class << self
312
+ attr_accessor :_trans_targs
313
+ private :_trans_targs, :_trans_targs=
314
+ end
315
+ self._trans_targs = [
316
+ 26, 0, 2, 3, 5, 20, 4, 5,
317
+ 6, 7, 8, 29, 10, 17, 7, 8,
318
+ 10, 17, 9, 11, 12, 27, 16, 11,
319
+ 12, 27, 16, 13, 15, 27, 7, 8,
320
+ 10, 17, 19, 30, 2, 3, 5, 20,
321
+ 22, 23, 22, 32, 25, 22, 23, 22,
322
+ 32, 25, 24, 26, 2, 27, 14, 28,
323
+ 2, 27, 14, 28, 2, 30, 18, 29,
324
+ 31, 18, 31, 30, 18, 31
325
+ ]
326
+
327
+ class << self
328
+ attr_accessor :_trans_actions
329
+ private :_trans_actions, :_trans_actions=
330
+ end
331
+ self._trans_actions = [
332
+ 1, 0, 0, 0, 2, 3, 0, 0,
333
+ 4, 5, 5, 5, 5, 6, 0, 0,
334
+ 0, 3, 0, 7, 7, 8, 7, 0,
335
+ 0, 9, 0, 0, 0, 0, 10, 10,
336
+ 10, 11, 0, 0, 10, 10, 12, 11,
337
+ 13, 13, 14, 15, 13, 0, 0, 3,
338
+ 16, 0, 0, 0, 17, 18, 18, 19,
339
+ 18, 20, 20, 21, 20, 18, 18, 0,
340
+ 22, 0, 3, 10, 10, 11
341
+ ]
18
342
 
343
+ class << self
344
+ attr_accessor :_eof_actions
345
+ private :_eof_actions, :_eof_actions=
346
+ end
347
+ self._eof_actions = [
348
+ 0, 0, 0, 0, 0, 0, 0, 0,
349
+ 0, 0, 0, 0, 0, 0, 0, 0,
350
+ 0, 0, 0, 0, 0, 0, 0, 0,
351
+ 0, 0, 17, 18, 20, 18, 0, 10,
352
+ 0
353
+ ]
354
+
355
+ class << self
356
+ attr_accessor :start
357
+ end
358
+ self.start = 1;
359
+ class << self
360
+ attr_accessor :first_final
361
+ end
362
+ self.first_final = 26;
363
+ class << self
364
+ attr_accessor :error
365
+ end
366
+ self.error = 0;
367
+
368
+ class << self
369
+ attr_accessor :en_comment_tail
370
+ end
371
+ self.en_comment_tail = 21;
372
+ class << self
373
+ attr_accessor :en_main
374
+ end
375
+ self.en_main = 1;
376
+
377
+
378
+
379
+ def self.parse(data)
380
+ content_disposition = ContentDispositionStruct.new('', [])
381
+ return content_disposition if Mail::Utilities.blank?(data)
382
+
383
+ # Parser state
19
384
  disp_type_s = param_attr_s = param_attr = qstr_s = qstr = param_val_s = nil
20
- actions.each_slice(2) do |action_id, p|
21
- action = Mail::Parsers::Ragel::ACTIONS[action_id]
22
- case action
23
-
24
- # Disposition Type
25
- when :disp_type_s then disp_type_s = p
26
- when :disp_type_e
27
- content_disposition.disposition_type = s[disp_type_s..(p-1)].downcase
28
-
29
- # Parameter Attribute
30
- when :param_attr_s then param_attr_s = p
31
- when :param_attr_e then param_attr = s[param_attr_s..(p-1)]
32
-
33
- # Quoted String.
34
- when :qstr_s then qstr_s = p
35
- when :qstr_e then qstr = s[qstr_s..(p-1)]
36
-
37
- # Parameter Value
38
- when :param_val_s then param_val_s = p
39
- when :param_val_e
40
- if param_attr.nil?
41
- raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, "no attribute for value")
42
- end
43
-
44
- # Use quoted string value if one exists, otherwise use parameter value
45
- if qstr
46
- value = qstr
47
- else
48
- value = s[param_val_s..(p-1)]
49
- end
50
-
51
- content_disposition.parameters << { param_attr => value }
52
- param_attr = nil
53
- qstr = nil
54
-
55
- else
56
- raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, "Failed to process unknown action: #{action}")
57
- end
58
- end
59
385
 
60
- content_disposition
386
+ # 5.1 Variables Used by Ragel
387
+ p = 0
388
+ eof = pe = data.length
389
+ stack = []
390
+
391
+
392
+ begin
393
+ p ||= 0
394
+ pe ||= data.length
395
+ cs = start
396
+ top = 0
397
+ end
398
+
399
+
400
+ begin
401
+ testEof = false
402
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
403
+ _goto_level = 0
404
+ _resume = 10
405
+ _eof_trans = 15
406
+ _again = 20
407
+ _test_eof = 30
408
+ _out = 40
409
+ while true
410
+ if _goto_level <= 0
411
+ if p == pe
412
+ _goto_level = _test_eof
413
+ next
414
+ end
415
+ if cs == 0
416
+ _goto_level = _out
417
+ next
418
+ end
419
+ end
420
+ if _goto_level <= _resume
421
+ _keys = cs << 1
422
+ _inds = _index_offsets[cs]
423
+ _slen = _key_spans[cs]
424
+ _wide = data[p].ord
425
+ _trans = if ( _slen > 0 &&
426
+ _trans_keys[_keys] <= _wide &&
427
+ _wide <= _trans_keys[_keys + 1]
428
+ ) then
429
+ _indicies[ _inds + _wide - _trans_keys[_keys] ]
430
+ else
431
+ _indicies[ _inds + _slen ]
432
+ end
433
+ cs = _trans_targs[_trans]
434
+ if _trans_actions[_trans] != 0
435
+ case _trans_actions[_trans]
436
+ when 1 then
437
+ begin
438
+ disp_type_s = p end
439
+ when 17 then
440
+ begin
441
+ content_disposition.disposition_type = data[disp_type_s..(p-1)].downcase end
442
+ when 2 then
443
+ begin
444
+ param_attr_s = p end
445
+ when 4 then
446
+ begin
447
+ param_attr = data[param_attr_s..(p-1)] end
448
+ when 7 then
449
+ begin
450
+ qstr_s = p end
451
+ when 9 then
452
+ begin
453
+ qstr = data[qstr_s..(p-1)] end
454
+ when 5 then
455
+ begin
456
+ param_val_s = p end
457
+ when 18 then
458
+ begin
459
+
460
+ if param_attr.nil?
461
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
462
+ end
463
+
464
+ # Use quoted string value if one exists, otherwise use parameter value
465
+ value = qstr || data[param_val_s..(p-1)]
466
+
467
+ content_disposition.parameters << { param_attr => value }
468
+ param_attr = nil
469
+ qstr = nil
470
+ end
471
+ when 10 then
472
+ begin
473
+ end
474
+ when 13 then
475
+ begin
476
+ end
477
+ when 3 then
478
+ begin
479
+ begin
480
+ stack[top] = cs
481
+ top+= 1
482
+ cs = 21
483
+ _goto_level = _again
484
+ next
485
+ end
486
+ end
487
+ when 16 then
488
+ begin
489
+ begin
490
+ top -= 1
491
+ cs = stack[top]
492
+ _goto_level = _again
493
+ next
494
+ end
495
+ end
496
+ when 8 then
497
+ begin
498
+ qstr_s = p end
499
+ begin
500
+ qstr = data[qstr_s..(p-1)] end
501
+ when 6 then
502
+ begin
503
+ param_val_s = p end
504
+ begin
505
+ begin
506
+ stack[top] = cs
507
+ top+= 1
508
+ cs = 21
509
+ _goto_level = _again
510
+ next
511
+ end
512
+ end
513
+ when 22 then
514
+ begin
515
+
516
+ if param_attr.nil?
517
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
518
+ end
519
+
520
+ # Use quoted string value if one exists, otherwise use parameter value
521
+ value = qstr || data[param_val_s..(p-1)]
522
+
523
+ content_disposition.parameters << { param_attr => value }
524
+ param_attr = nil
525
+ qstr = nil
526
+ end
527
+ begin
528
+ begin
529
+ stack[top] = cs
530
+ top+= 1
531
+ cs = 21
532
+ _goto_level = _again
533
+ next
534
+ end
535
+ end
536
+ when 12 then
537
+ begin
538
+ end
539
+ begin
540
+ param_attr_s = p end
541
+ when 20 then
542
+ begin
543
+ end
544
+ begin
545
+
546
+ if param_attr.nil?
547
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
548
+ end
549
+
550
+ # Use quoted string value if one exists, otherwise use parameter value
551
+ value = qstr || data[param_val_s..(p-1)]
552
+
553
+ content_disposition.parameters << { param_attr => value }
554
+ param_attr = nil
555
+ qstr = nil
556
+ end
557
+ when 11 then
558
+ begin
559
+ end
560
+ begin
561
+ begin
562
+ stack[top] = cs
563
+ top+= 1
564
+ cs = 21
565
+ _goto_level = _again
566
+ next
567
+ end
568
+ end
569
+ when 14 then
570
+ begin
571
+ end
572
+ begin
573
+ begin
574
+ stack[top] = cs
575
+ top+= 1
576
+ cs = 21
577
+ _goto_level = _again
578
+ next
579
+ end
580
+ end
581
+ when 15 then
582
+ begin
583
+ end
584
+ begin
585
+ begin
586
+ top -= 1
587
+ cs = stack[top]
588
+ _goto_level = _again
589
+ next
590
+ end
591
+ end
592
+ when 19 then
593
+ begin
594
+ begin
595
+ stack[top] = cs
596
+ top+= 1
597
+ cs = 21
598
+ _goto_level = _again
599
+ next
600
+ end
601
+ end
602
+ begin
603
+
604
+ if param_attr.nil?
605
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
606
+ end
607
+
608
+ # Use quoted string value if one exists, otherwise use parameter value
609
+ value = qstr || data[param_val_s..(p-1)]
610
+
611
+ content_disposition.parameters << { param_attr => value }
612
+ param_attr = nil
613
+ qstr = nil
614
+ end
615
+ when 21 then
616
+ begin
617
+ end
618
+ begin
619
+ begin
620
+ stack[top] = cs
621
+ top+= 1
622
+ cs = 21
623
+ _goto_level = _again
624
+ next
625
+ end
626
+ end
627
+ begin
628
+
629
+ if param_attr.nil?
630
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
61
631
  end
62
632
 
63
- private
64
- def cleaned(string)
65
- string =~ /(.+);\s*$/ ? $1 : string
633
+ # Use quoted string value if one exists, otherwise use parameter value
634
+ value = qstr || data[param_val_s..(p-1)]
635
+
636
+ content_disposition.parameters << { param_attr => value }
637
+ param_attr = nil
638
+ qstr = nil
639
+ end
640
+ end
641
+ end
642
+ end
643
+ if _goto_level <= _again
644
+ if cs == 0
645
+ _goto_level = _out
646
+ next
647
+ end
648
+ p += 1
649
+ if p != pe
650
+ _goto_level = _resume
651
+ next
652
+ end
653
+ end
654
+ if _goto_level <= _test_eof
655
+ if p == eof
656
+ case _eof_actions[cs]
657
+ when 17 then
658
+ begin
659
+ content_disposition.disposition_type = data[disp_type_s..(p-1)].downcase end
660
+ when 18 then
661
+ begin
662
+
663
+ if param_attr.nil?
664
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
665
+ end
666
+
667
+ # Use quoted string value if one exists, otherwise use parameter value
668
+ value = qstr || data[param_val_s..(p-1)]
669
+
670
+ content_disposition.parameters << { param_attr => value }
671
+ param_attr = nil
672
+ qstr = nil
673
+ end
674
+ when 10 then
675
+ begin
676
+ end
677
+ when 20 then
678
+ begin
679
+ end
680
+ begin
681
+
682
+ if param_attr.nil?
683
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
684
+ end
685
+
686
+ # Use quoted string value if one exists, otherwise use parameter value
687
+ value = qstr || data[param_val_s..(p-1)]
688
+
689
+ content_disposition.parameters << { param_attr => value }
690
+ param_attr = nil
691
+ qstr = nil
692
+ end
693
+ end
694
+ end
695
+
696
+ end
697
+ if _goto_level <= _out
698
+ break
699
+ end
700
+ end
701
+ end
702
+
703
+
704
+ if p != eof || cs < 26
705
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "Only able to parse up to #{data[0..p]}")
706
+ end
707
+
708
+ content_disposition
66
709
  end
67
710
  end
68
711
  end