oneclick / rubyinstaller2

MSYS2 based RubyInstaller for Windows
https://rubyinstaller.org
BSD 3-Clause "New" or "Revised" License
644 stars 248 forks source link

Crash on `require rubygems` when running ruby with `-Eascii-8bit:ascii-8bit` and registry contains non-ASCII key #372

Closed ashie closed 2 months ago

ashie commented 4 months ago

What problems are you experiencing?

When I try to load rubygems, it crashes with following error. To reproduce this, the following conditions must be satisfied:

C:\Users\aho\Downloads\rubyinstaller-3.3.0-1-x64\bin>echo "require 'rubygems'" | ruby -Eascii-8bit:ascii-8bit
C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/rubygems.rb:1336:in `rescue in <top (required)>': U+3042 to ASCII-8BIT in conversion from UTF-16LE to UTF-8 to ASCII-8BIT (Encoding::UndefinedConversionError)
Loading the C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/rubygems/defaults/operating_system.rb file caused an error. This file is owned by your OS, not by rubygems upstream. Please find out which OS package this file belongs to and follow the guidelines from your OS to report the problem and ask for help.
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/rubygems.rb:1322:in `<top (required)>'
        from <internal:gem_prelude>:2:in `require'
        from <internal:gem_prelude>:2:in `<internal:gem_prelude>'
C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/win32/registry.rb:910:in `encode': U+3042 to ASCII-8BIT in conversion from UTF-16LE to UTF-8 to ASCII-8BIT (Encoding::UndefinedConversionError)
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/win32/registry.rb:910:in `export_string'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/win32/registry.rb:611:in `each_key'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/site_ruby/3.3.0/ruby_installer/runtime/msys2_installation.rb:71:in `block (2 levels) in iterate_msys_paths'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/win32/registry.rb:435:in `open'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/win32/registry.rb:542:in `open'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/site_ruby/3.3.0/ruby_installer/runtime/msys2_installation.rb:70:in `block in iterate_msys_paths'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/site_ruby/3.3.0/ruby_installer/runtime/msys2_installation.rb:68:in `each'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/site_ruby/3.3.0/ruby_installer/runtime/msys2_installation.rb:68:in `iterate_msys_paths'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/site_ruby/3.3.0/ruby_installer/runtime/msys2_installation.rb:102:in `msys_path'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/site_ruby/3.3.0/ruby_installer/runtime/msys2_installation.rb:115:in `mingw_bin_path'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/site_ruby/3.3.0/ruby_installer/runtime/msys2_installation.rb:125:in `enable_dll_search_paths'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/site_ruby/3.3.0/ruby_installer/runtime/singleton.rb:27:in `enable_dll_search_paths'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/rubygems/defaults/operating_system.rb:24:in `<top (required)>'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/rubygems.rb:1326:in `require'
        from C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64/lib/ruby/3.3.0/rubygems.rb:1326:in `<top (required)>'
        from <internal:gem_prelude>:2:in `require'
        from <internal:gem_prelude>:2:in `<internal:gem_prelude>'

We met this bug with Fluentd. Please see also https://github.com/fluent/fluent-package-builder/issues/616

Steps to reproduce

Please see above

What's the output from ridk version?

C:\Users\aho\Downloads\rubyinstaller-3.3.0-1-x64\bin>ridk version
---
ruby:
  path: C:/Users/aho/Downloads/rubyinstaller-3.3.0-1-x64
  version: 3.3.0
  platform: x64-mingw-ucrt
  cc: gcc.exe (Rev3, Built by MSYS2 project) 13.2.0
ruby_installer:
  package_version: 3.3.0-1
  git_commit: d808ebc
sh: GNU bash, version 5.2.21(1)-release (x86_64-pc-msys)
os: Microsoft Windows [Version 10.0.19045.3930]

Additional comment

Although using with -Eascii-8bit:ascii-8bit might not recommended for RubyInstaller, we are using it in our product (Fluentd). In this situation, this issue is hard to avoid in our product since it's occurred on very earlier stage in gem executables. So it would be happy if RubyInstaller provides a way to suppress this issue.

refs:

larskanis commented 2 months ago

Fixed by #375. Thank you!