mail 2.6.4 → 2.7.0

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 (162) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +74 -98
  3. data/lib/mail/attachments_list.rb +9 -5
  4. data/lib/mail/body.rb +42 -36
  5. data/lib/mail/check_delivery_params.rb +49 -10
  6. data/lib/mail/configuration.rb +2 -0
  7. data/lib/mail/core_extensions/smtp.rb +19 -16
  8. data/lib/mail/core_extensions/string.rb +0 -4
  9. data/lib/mail/elements/address.rb +37 -26
  10. data/lib/mail/elements/address_list.rb +10 -18
  11. data/lib/mail/elements/content_disposition_element.rb +8 -15
  12. data/lib/mail/elements/content_location_element.rb +5 -10
  13. data/lib/mail/elements/content_transfer_encoding_element.rb +5 -10
  14. data/lib/mail/elements/content_type_element.rb +8 -19
  15. data/lib/mail/elements/date_time_element.rb +6 -14
  16. data/lib/mail/elements/envelope_from_element.rb +14 -21
  17. data/lib/mail/elements/message_ids_element.rb +8 -12
  18. data/lib/mail/elements/mime_version_element.rb +6 -14
  19. data/lib/mail/elements/phrase_list.rb +6 -9
  20. data/lib/mail/elements/received_element.rb +9 -15
  21. data/lib/mail/encodings/7bit.rb +5 -15
  22. data/lib/mail/encodings/8bit.rb +2 -21
  23. data/lib/mail/encodings/base64.rb +11 -12
  24. data/lib/mail/encodings/binary.rb +3 -22
  25. data/lib/mail/encodings/identity.rb +24 -0
  26. data/lib/mail/encodings/quoted_printable.rb +6 -6
  27. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  28. data/lib/mail/encodings/unix_to_unix.rb +2 -1
  29. data/lib/mail/encodings.rb +99 -43
  30. data/lib/mail/envelope.rb +1 -1
  31. data/lib/mail/field.rb +94 -59
  32. data/lib/mail/fields/bcc_field.rb +2 -2
  33. data/lib/mail/fields/cc_field.rb +1 -1
  34. data/lib/mail/fields/comments_field.rb +1 -1
  35. data/lib/mail/fields/common/address_container.rb +2 -2
  36. data/lib/mail/fields/common/common_address.rb +32 -7
  37. data/lib/mail/fields/common/common_field.rb +1 -10
  38. data/lib/mail/fields/common/parameter_hash.rb +1 -1
  39. data/lib/mail/fields/content_description_field.rb +1 -1
  40. data/lib/mail/fields/content_disposition_field.rb +3 -3
  41. data/lib/mail/fields/content_id_field.rb +2 -2
  42. data/lib/mail/fields/content_location_field.rb +1 -1
  43. data/lib/mail/fields/content_transfer_encoding_field.rb +1 -1
  44. data/lib/mail/fields/content_type_field.rb +3 -8
  45. data/lib/mail/fields/date_field.rb +2 -3
  46. data/lib/mail/fields/from_field.rb +1 -1
  47. data/lib/mail/fields/in_reply_to_field.rb +1 -1
  48. data/lib/mail/fields/keywords_field.rb +1 -1
  49. data/lib/mail/fields/message_id_field.rb +1 -1
  50. data/lib/mail/fields/mime_version_field.rb +1 -1
  51. data/lib/mail/fields/optional_field.rb +4 -1
  52. data/lib/mail/fields/received_field.rb +1 -1
  53. data/lib/mail/fields/references_field.rb +1 -1
  54. data/lib/mail/fields/reply_to_field.rb +1 -1
  55. data/lib/mail/fields/resent_bcc_field.rb +1 -1
  56. data/lib/mail/fields/resent_cc_field.rb +1 -1
  57. data/lib/mail/fields/resent_date_field.rb +0 -1
  58. data/lib/mail/fields/resent_from_field.rb +1 -1
  59. data/lib/mail/fields/resent_message_id_field.rb +1 -1
  60. data/lib/mail/fields/resent_sender_field.rb +1 -1
  61. data/lib/mail/fields/resent_to_field.rb +1 -1
  62. data/lib/mail/fields/return_path_field.rb +1 -1
  63. data/lib/mail/fields/sender_field.rb +1 -1
  64. data/lib/mail/fields/subject_field.rb +1 -1
  65. data/lib/mail/fields/to_field.rb +1 -1
  66. data/lib/mail/fields/unstructured_field.rb +21 -4
  67. data/lib/mail/header.rb +10 -8
  68. data/lib/mail/mail.rb +2 -10
  69. data/lib/mail/matchers/has_sent_mail.rb +21 -1
  70. data/lib/mail/message.rb +77 -66
  71. data/lib/mail/multibyte/chars.rb +31 -30
  72. data/lib/mail/multibyte.rb +64 -15
  73. data/lib/mail/network/delivery_methods/exim.rb +6 -10
  74. data/lib/mail/network/delivery_methods/file_delivery.rb +4 -8
  75. data/lib/mail/network/delivery_methods/logger_delivery.rb +37 -0
  76. data/lib/mail/network/delivery_methods/sendmail.rb +16 -11
  77. data/lib/mail/network/delivery_methods/smtp.rb +59 -53
  78. data/lib/mail/network/delivery_methods/smtp_connection.rb +10 -6
  79. data/lib/mail/network/delivery_methods/test_mailer.rb +5 -8
  80. data/lib/mail/network/retriever_methods/imap.rb +18 -5
  81. data/lib/mail/network/retriever_methods/pop3.rb +3 -1
  82. data/lib/mail/network/retriever_methods/test_retriever.rb +1 -1
  83. data/lib/mail/network.rb +1 -0
  84. data/lib/mail/parser_tools.rb +15 -0
  85. data/lib/mail/parsers/address_lists_parser.rb +33186 -112
  86. data/lib/mail/parsers/address_lists_parser.rl +172 -0
  87. data/lib/mail/parsers/content_disposition_parser.rb +888 -55
  88. data/lib/mail/parsers/content_disposition_parser.rl +82 -0
  89. data/lib/mail/parsers/content_location_parser.rb +800 -23
  90. data/lib/mail/parsers/content_location_parser.rl +71 -0
  91. data/lib/mail/parsers/content_transfer_encoding_parser.rb +510 -22
  92. data/lib/mail/parsers/content_transfer_encoding_parser.rl +64 -0
  93. data/lib/mail/parsers/content_type_parser.rb +1032 -54
  94. data/lib/mail/parsers/content_type_parser.rl +83 -0
  95. data/lib/mail/parsers/date_time_parser.rb +873 -26
  96. data/lib/mail/parsers/date_time_parser.rl +62 -0
  97. data/lib/mail/parsers/envelope_from_parser.rb +3564 -36
  98. data/lib/mail/parsers/envelope_from_parser.rl +82 -0
  99. data/lib/mail/parsers/message_ids_parser.rb +2843 -25
  100. data/lib/mail/parsers/message_ids_parser.rl +82 -0
  101. data/lib/mail/parsers/mime_version_parser.rb +493 -26
  102. data/lib/mail/parsers/mime_version_parser.rl +61 -0
  103. data/lib/mail/parsers/phrase_lists_parser.rb +874 -19
  104. data/lib/mail/parsers/phrase_lists_parser.rl +83 -0
  105. data/lib/mail/parsers/received_parser.rb +8743 -38
  106. data/lib/mail/parsers/received_parser.rl +84 -0
  107. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
  108. data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
  109. data/lib/mail/parsers/rfc2045_mime.rl +16 -0
  110. data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
  111. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  112. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
  113. data/lib/mail/parsers/rfc5322.rl +59 -0
  114. data/lib/mail/parsers/rfc5322_address.rl +72 -0
  115. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +8 -1
  116. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
  117. data/lib/mail/parsers.rb +16 -24
  118. data/lib/mail/part.rb +1 -1
  119. data/lib/mail/parts_list.rb +5 -6
  120. data/lib/mail/utilities.rb +63 -18
  121. data/lib/mail/version.rb +2 -2
  122. data/lib/mail/version_specific/ruby_1_8.rb +40 -3
  123. data/lib/mail/version_specific/ruby_1_9.rb +64 -9
  124. data/lib/mail.rb +3 -16
  125. metadata +30 -53
  126. data/CHANGELOG.rdoc +0 -787
  127. data/CONTRIBUTING.md +0 -60
  128. data/Dependencies.txt +0 -2
  129. data/Gemfile +0 -11
  130. data/Rakefile +0 -29
  131. data/TODO.rdoc +0 -9
  132. data/lib/mail/core_extensions/string/access.rb +0 -146
  133. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  134. data/lib/mail/multibyte/exceptions.rb +0 -9
  135. data/lib/mail/parsers/ragel/common.rl +0 -185
  136. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  137. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  138. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  139. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  140. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  141. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  142. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  143. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  144. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  145. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  146. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  147. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  148. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  149. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  150. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  151. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  152. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  153. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  154. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  155. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  156. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  157. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  158. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  159. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  160. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
  161. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  162. data/lib/mail/parsers/ragel.rb +0 -18
@@ -1,68 +1,901 @@
1
+
1
2
  # frozen_string_literal: true
3
+ require 'mail/utilities'
4
+ require 'mail/parser_tools'
5
+
6
+
7
+
8
+
2
9
  module Mail::Parsers
3
- class ContentDispositionParser
4
- include Mail::Utilities
10
+ module ContentDispositionParser
11
+ extend Mail::ParserTools
5
12
 
6
- def parse(s)
7
- content_disposition = ContentDispositionStruct.new("", nil)
8
- if Mail::Utilities.blank?(s)
9
- return content_disposition
10
- end
13
+ ContentDispositionStruct = Struct.new(:disposition_type, :parameters, :error)
11
14
 
12
- actions, error = Ragel.parse(:content_disposition, s)
13
- if error
14
- raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, error)
15
- end
15
+
16
+ class << self
17
+ attr_accessor :_trans_keys
18
+ private :_trans_keys, :_trans_keys=
19
+ end
20
+ self._trans_keys = [
21
+ 0, 0, 33, 126, 9, 126,
22
+ 10, 10, 9, 32, 33,
23
+ 126, 9, 126, 9, 40,
24
+ 10, 10, 9, 32, 1, 244,
25
+ 1, 244, 10, 10, 9,
26
+ 32, 10, 10, 9, 32,
27
+ 0, 244, 128, 191, 160, 191,
28
+ 128, 191, 128, 159, 144,
29
+ 191, 128, 191, 128, 143,
30
+ 9, 40, 10, 10, 9, 32,
31
+ 9, 126, 1, 244, 1,
32
+ 244, 10, 10, 9, 32,
33
+ 0, 244, 128, 191, 160, 191,
34
+ 128, 191, 128, 159, 144,
35
+ 191, 128, 191, 128, 143,
36
+ 33, 126, 9, 59, 9, 59,
37
+ 9, 126, 9, 59, 9,
38
+ 59, 0, 0, 0
39
+ ]
40
+
41
+ class << self
42
+ attr_accessor :_key_spans
43
+ private :_key_spans, :_key_spans=
44
+ end
45
+ self._key_spans = [
46
+ 0, 94, 118, 1, 24, 94, 118, 32,
47
+ 1, 24, 244, 244, 1, 24, 1, 24,
48
+ 245, 64, 32, 64, 32, 48, 64, 16,
49
+ 32, 1, 24, 118, 244, 244, 1, 24,
50
+ 245, 64, 32, 64, 32, 48, 64, 16,
51
+ 94, 51, 51, 118, 51, 51, 0
52
+ ]
53
+
54
+ class << self
55
+ attr_accessor :_index_offsets
56
+ private :_index_offsets, :_index_offsets=
57
+ end
58
+ self._index_offsets = [
59
+ 0, 0, 95, 214, 216, 241, 336, 455,
60
+ 488, 490, 515, 760, 1005, 1007, 1032, 1034,
61
+ 1059, 1305, 1370, 1403, 1468, 1501, 1550, 1615,
62
+ 1632, 1665, 1667, 1692, 1811, 2056, 2301, 2303,
63
+ 2328, 2574, 2639, 2672, 2737, 2770, 2819, 2884,
64
+ 2901, 2996, 3048, 3100, 3219, 3271, 3323
65
+ ]
66
+
67
+ class << self
68
+ attr_accessor :_indicies
69
+ private :_indicies, :_indicies=
70
+ end
71
+ self._indicies = [
72
+ 0, 0, 0, 0, 0, 0, 0, 1,
73
+ 1, 0, 0, 0, 0, 0, 1, 0,
74
+ 0, 0, 0, 0, 0, 0, 0, 0,
75
+ 0, 1, 1, 1, 1, 1, 1, 1,
76
+ 0, 0, 0, 0, 0, 0, 0, 0,
77
+ 0, 0, 0, 0, 0, 0, 0, 0,
78
+ 0, 0, 0, 0, 0, 0, 0, 0,
79
+ 0, 0, 1, 1, 1, 0, 0, 0,
80
+ 0, 0, 0, 0, 0, 0, 0, 0,
81
+ 0, 0, 0, 0, 0, 0, 0, 0,
82
+ 0, 0, 0, 0, 0, 0, 0, 0,
83
+ 0, 0, 0, 0, 0, 0, 1, 2,
84
+ 1, 1, 1, 3, 1, 1, 1, 1,
85
+ 1, 1, 1, 1, 1, 1, 1, 1,
86
+ 1, 1, 1, 1, 1, 1, 2, 4,
87
+ 4, 4, 4, 4, 4, 4, 5, 1,
88
+ 4, 4, 4, 4, 4, 1, 4, 4,
89
+ 4, 4, 4, 4, 4, 4, 4, 4,
90
+ 1, 1, 1, 1, 1, 1, 1, 4,
91
+ 4, 4, 4, 4, 4, 4, 4, 4,
92
+ 4, 4, 4, 4, 4, 4, 4, 4,
93
+ 4, 4, 4, 4, 4, 4, 4, 4,
94
+ 4, 1, 1, 1, 4, 4, 4, 4,
95
+ 4, 4, 4, 4, 4, 4, 4, 4,
96
+ 4, 4, 4, 4, 4, 4, 4, 4,
97
+ 4, 4, 4, 4, 4, 4, 4, 4,
98
+ 4, 4, 4, 4, 4, 1, 6, 1,
99
+ 2, 1, 1, 1, 1, 1, 1, 1,
100
+ 1, 1, 1, 1, 1, 1, 1, 1,
101
+ 1, 1, 1, 1, 1, 1, 1, 2,
102
+ 1, 7, 7, 7, 7, 7, 7, 7,
103
+ 1, 1, 7, 7, 7, 7, 7, 1,
104
+ 7, 7, 7, 7, 7, 7, 7, 7,
105
+ 7, 7, 1, 1, 1, 8, 1, 1,
106
+ 1, 7, 7, 7, 7, 7, 7, 7,
107
+ 7, 7, 7, 7, 7, 7, 7, 7,
108
+ 7, 7, 7, 7, 7, 7, 7, 7,
109
+ 7, 7, 7, 1, 1, 1, 7, 7,
110
+ 7, 7, 7, 7, 7, 7, 7, 7,
111
+ 7, 7, 7, 7, 7, 7, 7, 7,
112
+ 7, 7, 7, 7, 7, 7, 7, 7,
113
+ 7, 7, 7, 7, 7, 7, 7, 1,
114
+ 9, 1, 1, 1, 10, 1, 1, 1,
115
+ 1, 1, 1, 1, 1, 1, 1, 1,
116
+ 1, 1, 1, 1, 1, 1, 1, 9,
117
+ 11, 12, 11, 11, 11, 11, 11, 13,
118
+ 1, 11, 11, 11, 11, 11, 1, 11,
119
+ 11, 11, 11, 11, 11, 11, 11, 11,
120
+ 11, 1, 1, 1, 11, 1, 1, 1,
121
+ 11, 11, 11, 11, 11, 11, 11, 11,
122
+ 11, 11, 11, 11, 11, 11, 11, 11,
123
+ 11, 11, 11, 11, 11, 11, 11, 11,
124
+ 11, 11, 1, 1, 1, 11, 11, 11,
125
+ 11, 11, 11, 11, 11, 11, 11, 11,
126
+ 11, 11, 11, 11, 11, 11, 11, 11,
127
+ 11, 11, 11, 11, 11, 11, 11, 11,
128
+ 11, 11, 11, 11, 11, 11, 1, 14,
129
+ 1, 1, 1, 15, 1, 1, 1, 1,
130
+ 1, 1, 1, 1, 1, 1, 1, 1,
131
+ 1, 1, 1, 1, 1, 1, 14, 1,
132
+ 16, 1, 1, 1, 1, 1, 17, 1,
133
+ 18, 1, 14, 1, 1, 1, 1, 1,
134
+ 1, 1, 1, 1, 1, 1, 1, 1,
135
+ 1, 1, 1, 1, 1, 1, 1, 1,
136
+ 1, 14, 1, 19, 19, 19, 19, 19,
137
+ 19, 19, 19, 19, 1, 19, 19, 20,
138
+ 19, 19, 19, 19, 19, 19, 19, 19,
139
+ 19, 19, 19, 19, 19, 19, 19, 19,
140
+ 19, 19, 19, 19, 21, 19, 19, 19,
141
+ 19, 19, 19, 19, 19, 19, 19, 19,
142
+ 19, 19, 19, 19, 19, 19, 19, 19,
143
+ 19, 19, 19, 19, 19, 19, 19, 19,
144
+ 19, 19, 19, 19, 19, 19, 19, 19,
145
+ 19, 19, 19, 19, 19, 19, 19, 19,
146
+ 19, 19, 19, 19, 19, 19, 19, 19,
147
+ 19, 19, 19, 19, 19, 19, 22, 19,
148
+ 19, 19, 19, 19, 19, 19, 19, 19,
149
+ 19, 19, 19, 19, 19, 19, 19, 19,
150
+ 19, 19, 19, 19, 19, 19, 19, 19,
151
+ 19, 19, 19, 19, 19, 19, 19, 19,
152
+ 19, 19, 1, 1, 1, 1, 1, 1,
153
+ 1, 1, 1, 1, 1, 1, 1, 1,
154
+ 1, 1, 1, 1, 1, 1, 1, 1,
155
+ 1, 1, 1, 1, 1, 1, 1, 1,
156
+ 1, 1, 1, 1, 1, 1, 1, 1,
157
+ 1, 1, 1, 1, 1, 1, 1, 1,
158
+ 1, 1, 1, 1, 1, 1, 1, 1,
159
+ 1, 1, 1, 1, 1, 1, 1, 1,
160
+ 1, 1, 1, 1, 23, 23, 23, 23,
161
+ 23, 23, 23, 23, 23, 23, 23, 23,
162
+ 23, 23, 23, 23, 23, 23, 23, 23,
163
+ 23, 23, 23, 23, 23, 23, 23, 23,
164
+ 23, 23, 24, 25, 25, 25, 25, 25,
165
+ 25, 25, 25, 25, 25, 25, 25, 26,
166
+ 25, 25, 27, 28, 28, 28, 29, 1,
167
+ 30, 30, 30, 30, 30, 30, 30, 30,
168
+ 30, 1, 30, 30, 31, 30, 30, 30,
169
+ 30, 30, 30, 30, 30, 30, 30, 30,
170
+ 30, 30, 30, 30, 30, 30, 30, 30,
171
+ 30, 32, 30, 30, 30, 30, 30, 30,
172
+ 30, 30, 30, 30, 30, 30, 30, 30,
173
+ 30, 30, 30, 30, 30, 30, 30, 30,
174
+ 30, 30, 30, 30, 30, 30, 30, 30,
175
+ 30, 30, 30, 30, 30, 30, 30, 30,
176
+ 30, 30, 30, 30, 30, 30, 30, 30,
177
+ 30, 30, 30, 30, 30, 30, 30, 30,
178
+ 30, 30, 30, 33, 30, 30, 30, 30,
179
+ 30, 30, 30, 30, 30, 30, 30, 30,
180
+ 30, 30, 30, 30, 30, 30, 30, 30,
181
+ 30, 30, 30, 30, 30, 30, 30, 30,
182
+ 30, 30, 30, 30, 30, 30, 30, 1,
183
+ 1, 1, 1, 1, 1, 1, 1, 1,
184
+ 1, 1, 1, 1, 1, 1, 1, 1,
185
+ 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1,
189
+ 1, 1, 1, 1, 1, 1, 1, 1,
190
+ 1, 1, 1, 1, 1, 1, 1, 1,
191
+ 1, 34, 34, 34, 34, 34, 34, 34,
192
+ 34, 34, 34, 34, 34, 34, 34, 34,
193
+ 34, 34, 34, 34, 34, 34, 34, 34,
194
+ 34, 34, 34, 34, 34, 34, 34, 35,
195
+ 36, 36, 36, 36, 36, 36, 36, 36,
196
+ 36, 36, 36, 36, 37, 36, 36, 38,
197
+ 39, 39, 39, 40, 1, 41, 1, 30,
198
+ 1, 1, 1, 1, 1, 1, 1, 1,
199
+ 1, 1, 1, 1, 1, 1, 1, 1,
200
+ 1, 1, 1, 1, 1, 1, 30, 1,
201
+ 42, 1, 43, 1, 1, 1, 1, 1,
202
+ 1, 1, 1, 1, 1, 1, 1, 1,
203
+ 1, 1, 1, 1, 1, 1, 1, 1,
204
+ 1, 43, 1, 30, 30, 30, 30, 30,
205
+ 30, 30, 30, 30, 30, 30, 30, 30,
206
+ 30, 30, 30, 30, 30, 30, 30, 30,
207
+ 30, 30, 30, 30, 30, 30, 30, 30,
208
+ 30, 30, 30, 30, 30, 30, 30, 30,
209
+ 30, 30, 30, 30, 30, 30, 30, 30,
210
+ 30, 30, 30, 30, 30, 30, 30, 30,
211
+ 30, 30, 30, 30, 30, 30, 30, 30,
212
+ 30, 30, 30, 30, 30, 30, 30, 30,
213
+ 30, 30, 30, 30, 30, 30, 30, 30,
214
+ 30, 30, 30, 30, 30, 30, 30, 30,
215
+ 30, 30, 30, 30, 30, 30, 30, 30,
216
+ 30, 30, 30, 30, 30, 30, 30, 30,
217
+ 30, 30, 30, 30, 30, 30, 30, 30,
218
+ 30, 30, 30, 30, 30, 30, 30, 30,
219
+ 30, 30, 30, 30, 30, 30, 30, 30,
220
+ 30, 30, 30, 1, 1, 1, 1, 1,
221
+ 1, 1, 1, 1, 1, 1, 1, 1,
222
+ 1, 1, 1, 1, 1, 1, 1, 1,
223
+ 1, 1, 1, 1, 1, 1, 1, 1,
224
+ 1, 1, 1, 1, 1, 1, 1, 1,
225
+ 1, 1, 1, 1, 1, 1, 1, 1,
226
+ 1, 1, 1, 1, 1, 1, 1, 1,
227
+ 1, 1, 1, 1, 1, 1, 1, 1,
228
+ 1, 1, 1, 1, 1, 34, 34, 34,
229
+ 34, 34, 34, 34, 34, 34, 34, 34,
230
+ 34, 34, 34, 34, 34, 34, 34, 34,
231
+ 34, 34, 34, 34, 34, 34, 34, 34,
232
+ 34, 34, 34, 35, 36, 36, 36, 36,
233
+ 36, 36, 36, 36, 36, 36, 36, 36,
234
+ 37, 36, 36, 38, 39, 39, 39, 40,
235
+ 1, 30, 30, 30, 30, 30, 30, 30,
236
+ 30, 30, 30, 30, 30, 30, 30, 30,
237
+ 30, 30, 30, 30, 30, 30, 30, 30,
238
+ 30, 30, 30, 30, 30, 30, 30, 30,
239
+ 30, 30, 30, 30, 30, 30, 30, 30,
240
+ 30, 30, 30, 30, 30, 30, 30, 30,
241
+ 30, 30, 30, 30, 30, 30, 30, 30,
242
+ 30, 30, 30, 30, 30, 30, 30, 30,
243
+ 30, 1, 34, 34, 34, 34, 34, 34,
244
+ 34, 34, 34, 34, 34, 34, 34, 34,
245
+ 34, 34, 34, 34, 34, 34, 34, 34,
246
+ 34, 34, 34, 34, 34, 34, 34, 34,
247
+ 34, 34, 1, 34, 34, 34, 34, 34,
248
+ 34, 34, 34, 34, 34, 34, 34, 34,
249
+ 34, 34, 34, 34, 34, 34, 34, 34,
250
+ 34, 34, 34, 34, 34, 34, 34, 34,
251
+ 34, 34, 34, 34, 34, 34, 34, 34,
252
+ 34, 34, 34, 34, 34, 34, 34, 34,
253
+ 34, 34, 34, 34, 34, 34, 34, 34,
254
+ 34, 34, 34, 34, 34, 34, 34, 34,
255
+ 34, 34, 34, 1, 34, 34, 34, 34,
256
+ 34, 34, 34, 34, 34, 34, 34, 34,
257
+ 34, 34, 34, 34, 34, 34, 34, 34,
258
+ 34, 34, 34, 34, 34, 34, 34, 34,
259
+ 34, 34, 34, 34, 1, 36, 36, 36,
260
+ 36, 36, 36, 36, 36, 36, 36, 36,
261
+ 36, 36, 36, 36, 36, 36, 36, 36,
262
+ 36, 36, 36, 36, 36, 36, 36, 36,
263
+ 36, 36, 36, 36, 36, 36, 36, 36,
264
+ 36, 36, 36, 36, 36, 36, 36, 36,
265
+ 36, 36, 36, 36, 36, 1, 36, 36,
266
+ 36, 36, 36, 36, 36, 36, 36, 36,
267
+ 36, 36, 36, 36, 36, 36, 36, 36,
268
+ 36, 36, 36, 36, 36, 36, 36, 36,
269
+ 36, 36, 36, 36, 36, 36, 36, 36,
270
+ 36, 36, 36, 36, 36, 36, 36, 36,
271
+ 36, 36, 36, 36, 36, 36, 36, 36,
272
+ 36, 36, 36, 36, 36, 36, 36, 36,
273
+ 36, 36, 36, 36, 36, 36, 1, 36,
274
+ 36, 36, 36, 36, 36, 36, 36, 36,
275
+ 36, 36, 36, 36, 36, 36, 36, 1,
276
+ 44, 1, 1, 1, 45, 1, 1, 1,
277
+ 1, 1, 1, 1, 1, 1, 1, 1,
278
+ 1, 1, 1, 1, 1, 1, 1, 44,
279
+ 1, 46, 1, 1, 1, 1, 1, 47,
280
+ 1, 48, 1, 49, 1, 1, 1, 1,
281
+ 1, 1, 1, 1, 1, 1, 1, 1,
282
+ 1, 1, 1, 1, 1, 1, 1, 1,
283
+ 1, 1, 49, 1, 50, 1, 1, 1,
284
+ 51, 1, 1, 1, 1, 1, 1, 1,
285
+ 1, 1, 1, 1, 1, 1, 1, 1,
286
+ 1, 1, 1, 50, 52, 52, 52, 52,
287
+ 52, 52, 52, 53, 1, 52, 52, 52,
288
+ 52, 52, 1, 52, 52, 52, 52, 52,
289
+ 52, 52, 52, 52, 52, 1, 1, 1,
290
+ 1, 1, 1, 1, 52, 52, 52, 52,
291
+ 52, 52, 52, 52, 52, 52, 52, 52,
292
+ 52, 52, 52, 52, 52, 52, 52, 52,
293
+ 52, 52, 52, 52, 52, 52, 1, 1,
294
+ 1, 52, 52, 52, 52, 52, 52, 52,
295
+ 52, 52, 52, 52, 52, 52, 52, 52,
296
+ 52, 52, 52, 52, 52, 52, 52, 52,
297
+ 52, 52, 52, 52, 52, 52, 52, 52,
298
+ 52, 52, 1, 54, 54, 54, 54, 54,
299
+ 54, 54, 54, 54, 1, 54, 54, 55,
300
+ 54, 54, 54, 54, 54, 54, 54, 54,
301
+ 54, 54, 54, 54, 54, 54, 54, 54,
302
+ 54, 54, 54, 54, 54, 54, 54, 54,
303
+ 54, 54, 56, 57, 54, 54, 54, 54,
304
+ 54, 54, 54, 54, 54, 54, 54, 54,
305
+ 54, 54, 54, 54, 54, 54, 54, 54,
306
+ 54, 54, 54, 54, 54, 54, 54, 54,
307
+ 54, 54, 54, 54, 54, 54, 54, 54,
308
+ 54, 54, 54, 54, 54, 54, 54, 54,
309
+ 54, 54, 54, 54, 54, 54, 58, 54,
310
+ 54, 54, 54, 54, 54, 54, 54, 54,
311
+ 54, 54, 54, 54, 54, 54, 54, 54,
312
+ 54, 54, 54, 54, 54, 54, 54, 54,
313
+ 54, 54, 54, 54, 54, 54, 54, 54,
314
+ 54, 54, 1, 1, 1, 1, 1, 1,
315
+ 1, 1, 1, 1, 1, 1, 1, 1,
316
+ 1, 1, 1, 1, 1, 1, 1, 1,
317
+ 1, 1, 1, 1, 1, 1, 1, 1,
318
+ 1, 1, 1, 1, 1, 1, 1, 1,
319
+ 1, 1, 1, 1, 1, 1, 1, 1,
320
+ 1, 1, 1, 1, 1, 1, 1, 1,
321
+ 1, 1, 1, 1, 1, 1, 1, 1,
322
+ 1, 1, 1, 1, 59, 59, 59, 59,
323
+ 59, 59, 59, 59, 59, 59, 59, 59,
324
+ 59, 59, 59, 59, 59, 59, 59, 59,
325
+ 59, 59, 59, 59, 59, 59, 59, 59,
326
+ 59, 59, 60, 61, 61, 61, 61, 61,
327
+ 61, 61, 61, 61, 61, 61, 61, 62,
328
+ 61, 61, 63, 64, 64, 64, 65, 1,
329
+ 66, 66, 66, 66, 66, 66, 66, 66,
330
+ 66, 1, 66, 66, 67, 66, 66, 66,
331
+ 66, 66, 66, 66, 66, 66, 66, 66,
332
+ 66, 66, 66, 66, 66, 66, 66, 66,
333
+ 66, 66, 66, 66, 66, 66, 66, 68,
334
+ 69, 66, 66, 66, 66, 66, 66, 66,
335
+ 66, 66, 66, 66, 66, 66, 66, 66,
336
+ 66, 66, 66, 66, 66, 66, 66, 66,
337
+ 66, 66, 66, 66, 66, 66, 66, 66,
338
+ 66, 66, 66, 66, 66, 66, 66, 66,
339
+ 66, 66, 66, 66, 66, 66, 66, 66,
340
+ 66, 66, 66, 70, 66, 66, 66, 66,
341
+ 66, 66, 66, 66, 66, 66, 66, 66,
342
+ 66, 66, 66, 66, 66, 66, 66, 66,
343
+ 66, 66, 66, 66, 66, 66, 66, 66,
344
+ 66, 66, 66, 66, 66, 66, 66, 1,
345
+ 1, 1, 1, 1, 1, 1, 1, 1,
346
+ 1, 1, 1, 1, 1, 1, 1, 1,
347
+ 1, 1, 1, 1, 1, 1, 1, 1,
348
+ 1, 1, 1, 1, 1, 1, 1, 1,
349
+ 1, 1, 1, 1, 1, 1, 1, 1,
350
+ 1, 1, 1, 1, 1, 1, 1, 1,
351
+ 1, 1, 1, 1, 1, 1, 1, 1,
352
+ 1, 1, 1, 1, 1, 1, 1, 1,
353
+ 1, 71, 71, 71, 71, 71, 71, 71,
354
+ 71, 71, 71, 71, 71, 71, 71, 71,
355
+ 71, 71, 71, 71, 71, 71, 71, 71,
356
+ 71, 71, 71, 71, 71, 71, 71, 72,
357
+ 73, 73, 73, 73, 73, 73, 73, 73,
358
+ 73, 73, 73, 73, 74, 73, 73, 75,
359
+ 76, 76, 76, 77, 1, 78, 1, 66,
360
+ 1, 1, 1, 1, 1, 1, 1, 1,
361
+ 1, 1, 1, 1, 1, 1, 1, 1,
362
+ 1, 1, 1, 1, 1, 1, 66, 1,
363
+ 66, 66, 66, 66, 66, 66, 66, 66,
364
+ 66, 66, 66, 66, 66, 66, 66, 66,
365
+ 66, 66, 66, 66, 66, 66, 66, 66,
366
+ 66, 66, 66, 66, 66, 66, 66, 66,
367
+ 66, 66, 66, 66, 66, 66, 66, 66,
368
+ 66, 66, 66, 66, 66, 66, 66, 66,
369
+ 66, 66, 66, 66, 66, 66, 66, 66,
370
+ 66, 66, 66, 66, 66, 66, 66, 66,
371
+ 66, 66, 66, 66, 66, 66, 66, 66,
372
+ 66, 66, 66, 66, 66, 66, 66, 66,
373
+ 66, 66, 66, 66, 66, 66, 66, 66,
374
+ 66, 66, 66, 66, 66, 66, 66, 66,
375
+ 66, 66, 66, 66, 66, 66, 66, 66,
376
+ 66, 66, 66, 66, 66, 66, 66, 66,
377
+ 66, 66, 66, 66, 66, 66, 66, 66,
378
+ 66, 66, 66, 66, 66, 66, 66, 66,
379
+ 1, 1, 1, 1, 1, 1, 1, 1,
380
+ 1, 1, 1, 1, 1, 1, 1, 1,
381
+ 1, 1, 1, 1, 1, 1, 1, 1,
382
+ 1, 1, 1, 1, 1, 1, 1, 1,
383
+ 1, 1, 1, 1, 1, 1, 1, 1,
384
+ 1, 1, 1, 1, 1, 1, 1, 1,
385
+ 1, 1, 1, 1, 1, 1, 1, 1,
386
+ 1, 1, 1, 1, 1, 1, 1, 1,
387
+ 1, 1, 71, 71, 71, 71, 71, 71,
388
+ 71, 71, 71, 71, 71, 71, 71, 71,
389
+ 71, 71, 71, 71, 71, 71, 71, 71,
390
+ 71, 71, 71, 71, 71, 71, 71, 71,
391
+ 72, 73, 73, 73, 73, 73, 73, 73,
392
+ 73, 73, 73, 73, 73, 74, 73, 73,
393
+ 75, 76, 76, 76, 77, 1, 66, 66,
394
+ 66, 66, 66, 66, 66, 66, 66, 66,
395
+ 66, 66, 66, 66, 66, 66, 66, 66,
396
+ 66, 66, 66, 66, 66, 66, 66, 66,
397
+ 66, 66, 66, 66, 66, 66, 66, 66,
398
+ 66, 66, 66, 66, 66, 66, 66, 66,
399
+ 66, 66, 66, 66, 66, 66, 66, 66,
400
+ 66, 66, 66, 66, 66, 66, 66, 66,
401
+ 66, 66, 66, 66, 66, 66, 1, 71,
402
+ 71, 71, 71, 71, 71, 71, 71, 71,
403
+ 71, 71, 71, 71, 71, 71, 71, 71,
404
+ 71, 71, 71, 71, 71, 71, 71, 71,
405
+ 71, 71, 71, 71, 71, 71, 71, 1,
406
+ 71, 71, 71, 71, 71, 71, 71, 71,
407
+ 71, 71, 71, 71, 71, 71, 71, 71,
408
+ 71, 71, 71, 71, 71, 71, 71, 71,
409
+ 71, 71, 71, 71, 71, 71, 71, 71,
410
+ 71, 71, 71, 71, 71, 71, 71, 71,
411
+ 71, 71, 71, 71, 71, 71, 71, 71,
412
+ 71, 71, 71, 71, 71, 71, 71, 71,
413
+ 71, 71, 71, 71, 71, 71, 71, 71,
414
+ 1, 71, 71, 71, 71, 71, 71, 71,
415
+ 71, 71, 71, 71, 71, 71, 71, 71,
416
+ 71, 71, 71, 71, 71, 71, 71, 71,
417
+ 71, 71, 71, 71, 71, 71, 71, 71,
418
+ 71, 1, 73, 73, 73, 73, 73, 73,
419
+ 73, 73, 73, 73, 73, 73, 73, 73,
420
+ 73, 73, 73, 73, 73, 73, 73, 73,
421
+ 73, 73, 73, 73, 73, 73, 73, 73,
422
+ 73, 73, 73, 73, 73, 73, 73, 73,
423
+ 73, 73, 73, 73, 73, 73, 73, 73,
424
+ 73, 73, 1, 73, 73, 73, 73, 73,
425
+ 73, 73, 73, 73, 73, 73, 73, 73,
426
+ 73, 73, 73, 73, 73, 73, 73, 73,
427
+ 73, 73, 73, 73, 73, 73, 73, 73,
428
+ 73, 73, 73, 73, 73, 73, 73, 73,
429
+ 73, 73, 73, 73, 73, 73, 73, 73,
430
+ 73, 73, 73, 73, 73, 73, 73, 73,
431
+ 73, 73, 73, 73, 73, 73, 73, 73,
432
+ 73, 73, 73, 1, 73, 73, 73, 73,
433
+ 73, 73, 73, 73, 73, 73, 73, 73,
434
+ 73, 73, 73, 73, 1, 79, 79, 79,
435
+ 79, 79, 79, 79, 1, 1, 79, 79,
436
+ 79, 79, 79, 1, 79, 79, 79, 79,
437
+ 79, 79, 79, 79, 79, 79, 1, 80,
438
+ 1, 1, 1, 1, 1, 79, 79, 79,
439
+ 79, 79, 79, 79, 79, 79, 79, 79,
440
+ 79, 79, 79, 79, 79, 79, 79, 79,
441
+ 79, 79, 79, 79, 79, 79, 79, 1,
442
+ 1, 1, 79, 79, 79, 79, 79, 79,
443
+ 79, 79, 79, 79, 79, 79, 79, 79,
444
+ 79, 79, 79, 79, 79, 79, 79, 79,
445
+ 79, 79, 79, 79, 79, 79, 79, 79,
446
+ 79, 79, 79, 1, 81, 1, 1, 1,
447
+ 82, 1, 1, 1, 1, 1, 1, 1,
448
+ 1, 1, 1, 1, 1, 1, 1, 1,
449
+ 1, 1, 1, 81, 1, 1, 1, 1,
450
+ 1, 1, 1, 83, 1, 1, 1, 1,
451
+ 1, 1, 1, 1, 1, 1, 1, 1,
452
+ 1, 1, 1, 1, 1, 1, 84, 1,
453
+ 85, 1, 1, 1, 86, 1, 1, 1,
454
+ 1, 1, 1, 1, 1, 1, 1, 1,
455
+ 1, 1, 1, 1, 1, 1, 1, 85,
456
+ 1, 1, 1, 1, 1, 1, 1, 87,
457
+ 1, 1, 1, 1, 1, 1, 1, 1,
458
+ 1, 1, 1, 1, 1, 1, 1, 1,
459
+ 1, 1, 88, 1, 89, 1, 1, 1,
460
+ 90, 1, 1, 1, 1, 1, 1, 1,
461
+ 1, 1, 1, 1, 1, 1, 1, 1,
462
+ 1, 1, 1, 89, 91, 1, 91, 91,
463
+ 91, 91, 91, 92, 1, 91, 91, 91,
464
+ 91, 91, 1, 91, 91, 91, 91, 91,
465
+ 91, 91, 91, 91, 91, 1, 84, 1,
466
+ 91, 1, 1, 1, 91, 91, 91, 91,
467
+ 91, 91, 91, 91, 91, 91, 91, 91,
468
+ 91, 91, 91, 91, 91, 91, 91, 91,
469
+ 91, 91, 91, 91, 91, 91, 1, 1,
470
+ 1, 91, 91, 91, 91, 91, 91, 91,
471
+ 91, 91, 91, 91, 91, 91, 91, 91,
472
+ 91, 91, 91, 91, 91, 91, 91, 91,
473
+ 91, 91, 91, 91, 91, 91, 91, 91,
474
+ 91, 91, 1, 49, 1, 1, 1, 93,
475
+ 1, 1, 1, 1, 1, 1, 1, 1,
476
+ 1, 1, 1, 1, 1, 1, 1, 1,
477
+ 1, 1, 49, 1, 1, 1, 1, 1,
478
+ 1, 1, 94, 1, 1, 1, 1, 1,
479
+ 1, 1, 1, 1, 1, 1, 1, 1,
480
+ 1, 1, 1, 1, 1, 2, 1, 95,
481
+ 1, 1, 1, 96, 1, 1, 1, 1,
482
+ 1, 1, 1, 1, 1, 1, 1, 1,
483
+ 1, 1, 1, 1, 1, 1, 95, 1,
484
+ 1, 1, 1, 1, 1, 1, 97, 1,
485
+ 1, 1, 1, 1, 1, 1, 1, 1,
486
+ 1, 1, 1, 1, 1, 1, 1, 1,
487
+ 1, 50, 1, 1, 0
488
+ ]
489
+
490
+ class << self
491
+ attr_accessor :_trans_targs
492
+ private :_trans_targs, :_trans_targs=
493
+ end
494
+ self._trans_targs = [
495
+ 40, 0, 2, 3, 5, 27, 4, 5,
496
+ 6, 7, 8, 43, 10, 24, 7, 8,
497
+ 10, 24, 9, 11, 12, 41, 16, 17,
498
+ 18, 19, 20, 21, 22, 23, 11, 12,
499
+ 41, 16, 17, 18, 19, 20, 21, 22,
500
+ 23, 13, 15, 41, 7, 8, 10, 24,
501
+ 26, 44, 2, 3, 5, 27, 29, 30,
502
+ 29, 46, 32, 33, 34, 35, 36, 37,
503
+ 38, 39, 29, 30, 29, 46, 32, 33,
504
+ 34, 35, 36, 37, 38, 39, 31, 40,
505
+ 2, 41, 14, 42, 2, 41, 14, 42,
506
+ 2, 44, 25, 43, 45, 25, 45, 44,
507
+ 25, 45
508
+ ]
509
+
510
+ class << self
511
+ attr_accessor :_trans_actions
512
+ private :_trans_actions, :_trans_actions=
513
+ end
514
+ self._trans_actions = [
515
+ 1, 0, 0, 0, 2, 3, 0, 0,
516
+ 4, 5, 5, 5, 5, 6, 0, 0,
517
+ 0, 3, 0, 7, 7, 8, 7, 7,
518
+ 7, 7, 7, 7, 7, 7, 0, 0,
519
+ 9, 0, 0, 0, 0, 0, 0, 0,
520
+ 0, 0, 0, 0, 10, 10, 10, 11,
521
+ 0, 0, 10, 10, 12, 11, 13, 13,
522
+ 14, 15, 13, 13, 13, 13, 13, 13,
523
+ 13, 13, 0, 0, 3, 16, 0, 0,
524
+ 0, 0, 0, 0, 0, 0, 0, 0,
525
+ 17, 18, 18, 19, 18, 20, 20, 21,
526
+ 20, 18, 18, 0, 22, 0, 3, 10,
527
+ 10, 11
528
+ ]
529
+
530
+ class << self
531
+ attr_accessor :_eof_actions
532
+ private :_eof_actions, :_eof_actions=
533
+ end
534
+ self._eof_actions = [
535
+ 0, 0, 0, 0, 0, 0, 0, 0,
536
+ 0, 0, 0, 0, 0, 0, 0, 0,
537
+ 0, 0, 0, 0, 0, 0, 0, 0,
538
+ 0, 0, 0, 0, 0, 0, 0, 0,
539
+ 0, 0, 0, 0, 0, 0, 0, 0,
540
+ 17, 18, 20, 18, 0, 10, 0
541
+ ]
16
542
 
17
- content_disposition.parameters = []
543
+ class << self
544
+ attr_accessor :start
545
+ end
546
+ self.start = 1;
547
+ class << self
548
+ attr_accessor :first_final
549
+ end
550
+ self.first_final = 40;
551
+ class << self
552
+ attr_accessor :error
553
+ end
554
+ self.error = 0;
555
+
556
+ class << self
557
+ attr_accessor :en_comment_tail
558
+ end
559
+ self.en_comment_tail = 28;
560
+ class << self
561
+ attr_accessor :en_main
562
+ end
563
+ self.en_main = 1;
18
564
 
565
+
566
+
567
+ def self.parse(data)
568
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
569
+
570
+ content_disposition = ContentDispositionStruct.new('', [])
571
+ return content_disposition if Mail::Utilities.blank?(data)
572
+
573
+ # Parser state
19
574
  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
575
 
60
- content_disposition
576
+ # 5.1 Variables Used by Ragel
577
+ p = 0
578
+ eof = pe = data.length
579
+ stack = []
580
+
581
+
582
+ begin
583
+ p ||= 0
584
+ pe ||= data.length
585
+ cs = start
586
+ top = 0
587
+ end
588
+
589
+
590
+ begin
591
+ testEof = false
592
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
593
+ _goto_level = 0
594
+ _resume = 10
595
+ _eof_trans = 15
596
+ _again = 20
597
+ _test_eof = 30
598
+ _out = 40
599
+ while true
600
+ if _goto_level <= 0
601
+ if p == pe
602
+ _goto_level = _test_eof
603
+ next
604
+ end
605
+ if cs == 0
606
+ _goto_level = _out
607
+ next
608
+ end
609
+ end
610
+ if _goto_level <= _resume
611
+ _keys = cs << 1
612
+ _inds = _index_offsets[cs]
613
+ _slen = _key_spans[cs]
614
+ _wide = data[p].ord
615
+ _trans = if ( _slen > 0 &&
616
+ _trans_keys[_keys] <= _wide &&
617
+ _wide <= _trans_keys[_keys + 1]
618
+ ) then
619
+ _indicies[ _inds + _wide - _trans_keys[_keys] ]
620
+ else
621
+ _indicies[ _inds + _slen ]
622
+ end
623
+ cs = _trans_targs[_trans]
624
+ if _trans_actions[_trans] != 0
625
+ case _trans_actions[_trans]
626
+ when 1 then
627
+ begin
628
+ disp_type_s = p end
629
+ when 17 then
630
+ begin
631
+ content_disposition.disposition_type = chars(data, disp_type_s, p-1).downcase end
632
+ when 2 then
633
+ begin
634
+ param_attr_s = p end
635
+ when 4 then
636
+ begin
637
+ param_attr = chars(data, param_attr_s, p-1) end
638
+ when 7 then
639
+ begin
640
+ qstr_s = p end
641
+ when 9 then
642
+ begin
643
+ qstr = chars(data, qstr_s, p-1) end
644
+ when 5 then
645
+ begin
646
+ param_val_s = p end
647
+ when 18 then
648
+ begin
649
+
650
+ if param_attr.nil?
651
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
652
+ end
653
+
654
+ # Use quoted string value if one exists, otherwise use parameter value
655
+ value = qstr || chars(data, param_val_s, p-1)
656
+
657
+ content_disposition.parameters << { param_attr => value }
658
+ param_attr = nil
659
+ qstr = nil
660
+ end
661
+ when 10 then
662
+ begin
663
+ end
664
+ when 13 then
665
+ begin
666
+ end
667
+ when 3 then
668
+ begin
669
+ begin
670
+ stack[top] = cs
671
+ top+= 1
672
+ cs = 28
673
+ _goto_level = _again
674
+ next
675
+ end
676
+ end
677
+ when 16 then
678
+ begin
679
+ begin
680
+ top -= 1
681
+ cs = stack[top]
682
+ _goto_level = _again
683
+ next
684
+ end
685
+ end
686
+ when 8 then
687
+ begin
688
+ qstr_s = p end
689
+ begin
690
+ qstr = chars(data, qstr_s, p-1) end
691
+ when 6 then
692
+ begin
693
+ param_val_s = p end
694
+ begin
695
+ begin
696
+ stack[top] = cs
697
+ top+= 1
698
+ cs = 28
699
+ _goto_level = _again
700
+ next
701
+ end
702
+ end
703
+ when 22 then
704
+ begin
705
+
706
+ if param_attr.nil?
707
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
708
+ end
709
+
710
+ # Use quoted string value if one exists, otherwise use parameter value
711
+ value = qstr || chars(data, param_val_s, p-1)
712
+
713
+ content_disposition.parameters << { param_attr => value }
714
+ param_attr = nil
715
+ qstr = nil
716
+ end
717
+ begin
718
+ begin
719
+ stack[top] = cs
720
+ top+= 1
721
+ cs = 28
722
+ _goto_level = _again
723
+ next
724
+ end
725
+ end
726
+ when 12 then
727
+ begin
728
+ end
729
+ begin
730
+ param_attr_s = p end
731
+ when 20 then
732
+ begin
733
+ end
734
+ begin
735
+
736
+ if param_attr.nil?
737
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
738
+ end
739
+
740
+ # Use quoted string value if one exists, otherwise use parameter value
741
+ value = qstr || chars(data, param_val_s, p-1)
742
+
743
+ content_disposition.parameters << { param_attr => value }
744
+ param_attr = nil
745
+ qstr = nil
746
+ end
747
+ when 11 then
748
+ begin
749
+ end
750
+ begin
751
+ begin
752
+ stack[top] = cs
753
+ top+= 1
754
+ cs = 28
755
+ _goto_level = _again
756
+ next
757
+ end
758
+ end
759
+ when 14 then
760
+ begin
761
+ end
762
+ begin
763
+ begin
764
+ stack[top] = cs
765
+ top+= 1
766
+ cs = 28
767
+ _goto_level = _again
768
+ next
769
+ end
770
+ end
771
+ when 15 then
772
+ begin
773
+ end
774
+ begin
775
+ begin
776
+ top -= 1
777
+ cs = stack[top]
778
+ _goto_level = _again
779
+ next
780
+ end
781
+ end
782
+ when 19 then
783
+ begin
784
+ begin
785
+ stack[top] = cs
786
+ top+= 1
787
+ cs = 28
788
+ _goto_level = _again
789
+ next
790
+ end
791
+ end
792
+ begin
793
+
794
+ if param_attr.nil?
795
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
796
+ end
797
+
798
+ # Use quoted string value if one exists, otherwise use parameter value
799
+ value = qstr || chars(data, param_val_s, p-1)
800
+
801
+ content_disposition.parameters << { param_attr => value }
802
+ param_attr = nil
803
+ qstr = nil
804
+ end
805
+ when 21 then
806
+ begin
807
+ end
808
+ begin
809
+ begin
810
+ stack[top] = cs
811
+ top+= 1
812
+ cs = 28
813
+ _goto_level = _again
814
+ next
815
+ end
816
+ end
817
+ begin
818
+
819
+ if param_attr.nil?
820
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
821
+ end
822
+
823
+ # Use quoted string value if one exists, otherwise use parameter value
824
+ value = qstr || chars(data, param_val_s, p-1)
825
+
826
+ content_disposition.parameters << { param_attr => value }
827
+ param_attr = nil
828
+ qstr = nil
829
+ end
830
+ end
831
+ end
832
+ end
833
+ if _goto_level <= _again
834
+ if cs == 0
835
+ _goto_level = _out
836
+ next
837
+ end
838
+ p += 1
839
+ if p != pe
840
+ _goto_level = _resume
841
+ next
842
+ end
843
+ end
844
+ if _goto_level <= _test_eof
845
+ if p == eof
846
+ case _eof_actions[cs]
847
+ when 17 then
848
+ begin
849
+ content_disposition.disposition_type = chars(data, disp_type_s, p-1).downcase end
850
+ when 18 then
851
+ begin
852
+
853
+ if param_attr.nil?
854
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
855
+ end
856
+
857
+ # Use quoted string value if one exists, otherwise use parameter value
858
+ value = qstr || chars(data, param_val_s, p-1)
859
+
860
+ content_disposition.parameters << { param_attr => value }
861
+ param_attr = nil
862
+ qstr = nil
863
+ end
864
+ when 10 then
865
+ begin
866
+ end
867
+ when 20 then
868
+ begin
869
+ end
870
+ begin
871
+
872
+ if param_attr.nil?
873
+ raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
61
874
  end
62
875
 
63
- private
64
- def cleaned(string)
65
- string =~ /(.+);\s*$/ ? $1 : string
876
+ # Use quoted string value if one exists, otherwise use parameter value
877
+ value = qstr || chars(data, param_val_s, p-1)
878
+
879
+ content_disposition.parameters << { param_attr => value }
880
+ param_attr = nil
881
+ qstr = nil
882
+ end
883
+ end
884
+ end
885
+
886
+ end
887
+ if _goto_level <= _out
888
+ break
889
+ end
890
+ end
891
+ end
892
+
893
+
894
+ if p != eof || cs < 40
895
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentDispositionElement, data, p)
896
+ end
897
+
898
+ content_disposition
66
899
  end
67
900
  end
68
901
  end