read_from_string incompatible encoding regexp match
- Dominant language
- Ruby
- Stars
- 3.7k
- Forks
- 934
- PR merge metrics
- No merged PRs in 30d
Description
Looks like read_from_string cannot with content_type `multipart/mixed`
This problem occurred on just one of my 8k email on google. Other handled good but on this one the lib just crashes.
All I do is just:
```
mail = Mail.read_from_string(imap.uid_fetch(uid, 'RFC822')[0].attr['RFC822'])
puts mail
```
It crashes when I try to output it
Stack trace:
```
rails aborted!
Encoding::CompatibilityError: incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/utilities.rb:42:in `==='
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/utilities.rb:42:in `token_safe?'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/utilities.rb:48:in `quote_token'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/fields/common/parameter_hash.rb:55:in `block in decoded'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/fields/common/parameter_hash.rb:54:in `map!'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/fields/common/parameter_hash.rb:54:in `decoded'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/fields/content_disposition_field.rb:63:in `decoded'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/fields/structured_field.rb:44:in `default'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/field.rb:237:in `method_missing'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/message.rb:1215:in `default'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/message.rb:581:in `content_disposition'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/message.rb:2144:in `find_attachment'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/message.rb:1931:in `attachment?'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/parts_list.rb:67:in `get_order_value'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/parts_list.rb:58:in `block in sort!'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/parts_list.rb:54:in `each'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/parts_list.rb:54:in `sort_by'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/parts_list.rb:54:in `sort!'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/body.rb:133:in `sort_parts!'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/body.rb:152:in `encoded'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/message.rb:1833:in `encoded'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/mail-2.7.0/lib/mail/message.rb:1896:in `to_s'
/Users/jerrygreen/projects/my_project/backend/app/lib/mail_saver.rb:9:in `puts'
/Users/jerrygreen/projects/my_project/backend/app/lib/mail_saver.rb:9:in `puts'
/Users/jerrygreen/projects/my_project/backend/app/lib/mail_saver.rb:9:in `save_mail'
/Users/jerrygreen/projects/my_project/backend/lib/tasks/imap.rake:122:in `block (3 levels) in '
/Users/jerrygreen/projects/my_project/backend/lib/tasks/imap.rake:89:in `reverse_each'
/Users/jerrygreen/projects/my_project/backend/lib/tasks/imap.rake:89:in `with_index'
/Users/jerrygreen/projects/my_project/backend/lib/tasks/imap.rake:89:in `block (2 levels) in '
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/railties-5.0.6/lib/rails/commands/rake_proxy.rb:14:in `block in run_rake_task'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/railties-5.0.6/lib/rails/commands/rake_proxy.rb:11:in `run_rake_task'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/railties-5.0.6/lib/rails/commands/commands_tasks.rb:51:in `run_command!'
/Users/jerrygreen/.rvm/gems/ruby-2.4.1/gems/railties-5.0.6/lib/rails/commands.rb:18:in `'
bin/rails:6:in `require'
bin/rails:6:in `'
```
Contributor guide
Research direction
Start with lib/mail/utilities.rb:42 in token_safe? and trace the calls through lib/mail/fields/common/parameter_hash.rb:54-55. Reproduce the report with Mail.read_from_string and puts using a multipart/mixed message. Done means this input can be output without raising Encoding::CompatibilityError.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ruby
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 40/100