-
-
Notifications
You must be signed in to change notification settings - Fork 69
Open
Labels
bugSomething isn't workingSomething isn't working
Description
New bug checklist
- I have updated
truemailto the latest version - I have read the Contribution Guidelines
- I have read the documentation
- I have searched for existing GitHub issues
Bug description
We are hitting the already once reported and fixed encoding conversion error #120 using Ruby 3.4.5 and Truemail 3.3.1 with logging enabled.
Here's a small repro case
Details
# test.rb
require "truemail"
Truemail.configure do |config|
config.verifier_email = "address@verifier.local"
config.logger = {
stdout: true
}
end
Truemail.validate("almost_gmail@gnail.com", with: :smtp)And here's the full stack trace:
Details
> ruby test.rb
/Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/validator_base.rb:17:in 'String#encode': "\xD3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/validator_base.rb:17:in 'block in Truemail::Log::Serializer::ValidatorBase#replace_invalid_chars'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/validator_base.rb:30:in 'Hash#transform_values'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/validator_base.rb:30:in 'block in Truemail::Log::Serializer::ValidatorBase#smtp_debug'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/validator_base.rb:24:in 'Array#map'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/validator_base.rb:24:in 'Truemail::Log::Serializer::ValidatorBase#smtp_debug'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/validator_base.rb:43:in 'Truemail::Log::Serializer::ValidatorBase#result'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/validator_text.rb:51:in 'Truemail::Log::Serializer::ValidatorText#txt_info_title'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/validator_text.rb:11:in 'Truemail::Log::Serializer::ValidatorText#serialize'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/log/serializer/base.rb:22:in 'Truemail::Log::Serializer::Base.call'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/logger.rb:71:in 'Truemail::Logger#push'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail/validator.rb:31:in 'Truemail::Validator#run'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/truemail-3.3.1/lib/truemail.rb:30:in 'Truemail.validate'
from test.rb:10:in ''
I did some digging, the problematic string in question is something like "550 mailbox almost_gmail@gnail.com unavailable (\xD3\xCA\xCF\xE4\xB2\xBB\xB4\xE6\xD4\xDA)\n" with the actual byte representation of:
bytes =
[53, 53, 48, 32, 109, 97, 105, 108, 98, 111, 120, 32, 97, 108, 109, 111, 115, 116, 95, 103, 109, 97, 105, 108, 64, 103, 110, 97, 105, 108, 46, 99, 111, 109, 32, 117, 110, 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 40, 211, 202, 207, 228, 178, 187, 180, 230, 212, 218, 41, 10]
Converting them back to string and running the relevant sanitization code from Truemail::Log::Serializer::ValidatorBase#replace_invalid_chars triggers the same error:
Details
> irb
irb(main):001* bytes =
irb(main):002> [53, 53, 48, 32, 109, 97, 105, 108, 98, 111, 120, 32, 97, 108, 109, 111, 115, 116, 95, 103, 109, 97, 105, 108, 64, 103, 110, 97, 105, 108, 46, 99, 111, 109, 32, 117, 110, 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 40, 211, 202, 207, 228, 178, 187, 180, 230, 212, 218, 41, 10]
=>
[53,
...
irb(main):003> bytes.pack("C*")
=> "550 mailbox almost_gmail@gnail.com unavailable (\xD3\xCA\xCF\xE4\xB2\xBB\xB4\xE6\xD4\xDA)\n"
irb(main):004> bytes.pack("C*").encode("UTF-8", invalid: :replace)
(irb):4:in 'String#encode': "\xD3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
from (irb):4:in ''
from :168:in 'Kernel#loop'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0/gems/irb-1.14.3/exe/irb:9:in ''
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/bin/irb:25:in 'Kernel#load'
from /Users/erik/.local/share/mise/installs/ruby/3.4.5/bin/irb:25:in ''
irb(main):005>
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working