Skip to content
  • David Rodríguez's avatar
    e7518a78
    Validate user input encoding · e7518a78
    David Rodríguez authored
    If the user has the encoding of her system messed up, she may end up
    sending us incorrectly encoding input, causing "invalid byte sequence in
    UTF-8" errors at random places.
    
    These errors can be forced on a system without encoding issues with
    something like:
    
    ```
    $ gem install$(echo -e "\xFF") foo
    /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/config_file.rb:534:in `block in set_config_file_name': invalid byte sequence in UTF-8 (ArgumentError)
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/config_file.rb:530:in `each'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/config_file.rb:530:in `set_config_file_name'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/config_file.rb:177:in `initialize'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/gem_runner.rb:71:in `new'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/gem_runner.rb:71:in `do_configuration'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/gem_runner.rb:33:in `run'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/bin/gem:10:in `<main>'
    ```
    
    This commit makes RubyGems print a better error in this case:
    
    ```
    $ ruby -Ilib bin/gem install$(echo -e "\xFF") foo
    /Users/deivid/Code/rubygems/rubygems/lib/rubygems/gem_runner.rb:75:in `validate_encoding': invalid argument: 'install�' has invalid encoding (Gem::OptionParser::InvalidArgument)
    	from /Users/deivid/Code/rubygems/rubygems/lib/rubygems/gem_runner.rb:31:in `run'
    	from bin/gem:10:in `<main>'
    ```
    e7518a78
    Validate user input encoding
    David Rodríguez authored
    If the user has the encoding of her system messed up, she may end up
    sending us incorrectly encoding input, causing "invalid byte sequence in
    UTF-8" errors at random places.
    
    These errors can be forced on a system without encoding issues with
    something like:
    
    ```
    $ gem install$(echo -e "\xFF") foo
    /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/config_file.rb:534:in `block in set_config_file_name': invalid byte sequence in UTF-8 (ArgumentError)
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/config_file.rb:530:in `each'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/config_file.rb:530:in `set_config_file_name'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/config_file.rb:177:in `initialize'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/gem_runner.rb:71:in `new'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/gem_runner.rb:71:in `do_configuration'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/gem_runner.rb:33:in `run'
    	from /Users/deivid/.asdf/installs/ruby/3.2.1/bin/gem:10:in `<main>'
    ```
    
    This commit makes RubyGems print a better error in this case:
    
    ```
    $ ruby -Ilib bin/gem install$(echo -e "\xFF") foo
    /Users/deivid/Code/rubygems/rubygems/lib/rubygems/gem_runner.rb:75:in `validate_encoding': invalid argument: 'install�' has invalid encoding (Gem::OptionParser::InvalidArgument)
    	from /Users/deivid/Code/rubygems/rubygems/lib/rubygems/gem_runner.rb:31:in `run'
    	from bin/gem:10:in `<main>'
    ```
Loading