Bug #8611

Minitest encoding problems.

Added by Anonymous almost 5 years ago. Updated almost 5 years ago.

Target version:
ruby -v:
2.0.0.latest patch


A long standing annoying misfeature of minitest is the problem with encoding, which I have solved by patching the backtrace.join line in units.rb, #puke method with map{ |str| str.force_encoding( "UTF-8 ) }. If I don't do this, the tests in irb won't run, instead I get a complaint about "ASCII 8" versus "UTF-8" incompatibility. Only happens when one extensively uses UTF characters when coding, an annoying intermittent error.


#1 [ruby-core:55851] Updated by Anonymous almost 5 years ago

Sorry for a terse report and lack of supporting materials, I'm extremely busy now.

#2 [ruby-core:55878] Updated by naruse (Yui NARUSE) almost 5 years ago

  • Status changed from Open to Feedback

You know, this must have reproducible code.

#3 [ruby-core:56105] Updated by Anonymous almost 5 years ago

All right, I am no longer getting the same error since I patched it for myself, but to illustrate what I am talking about, here is another way to crash irb in basically the same way, pointing to a wider problem. It can be illustrated with Pyper gem that I wrote as follows:

gem install 'pyper'
a = [1, 3, 4, 3, 0, 3, 1]
a.τsπ( :uniq ).χOixπ.χriXgζmEπ # consider it fuzz testing :-)

NoMethodError ensues, that crashes the irb:

NoMethodError: undefined method map' for 0:Fixnum
join': incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError)
from /usr/local/lib/ruby/2.0.0/irb.rb:526:in block (2 levels) in eval_input'
from /usr/local/lib/ruby/2.0.0/irb.rb:624:in
from /usr/local/lib/ruby/2.0.0/irb.rb:489:in block in eval_input'
from /usr/local/lib/ruby/2.0.0/irb/ruby-lex.rb:247:in
block (2 levels) in each_top_level_statement'
from /usr/local/lib/ruby/2.0.0/irb/ruby-lex.rb:233:in loop'
from /usr/local/lib/ruby/2.0.0/irb/ruby-lex.rb:233:in
block in each_top_level_statement'
from /usr/local/lib/ruby/2.0.0/irb/ruby-lex.rb:232:in catch'
from /usr/local/lib/ruby/2.0.0/irb/ruby-lex.rb:232:in
from /usr/local/lib/ruby/2.0.0/irb.rb:488:in eval_input'
from /usr/local/lib/ruby/2.0.0/irb.rb:397:in
block in start'
from /usr/local/lib/ruby/2.0.0/irb.rb:396:in catch'
from /usr/local/lib/ruby/2.0.0/irb.rb:396:in
from /usr/local/bin/irb:12:in `'

Note that eg.

a.τsπ( :uniq ).χOixπ.χriXgζqτ.tap { fail NoMethodError }

raises NoMethodError without crashing the irb.

Also available in: Atom PDF