[#46807] [ruby-trunk - Bug #7625][Open] Arrayを継承したオブジェクトのcompactがArrayを返す — "mogya@... (Daisuke Furukawa)" <mogya@...>

19 messages 2012/12/26

[#46822] [ruby-trunk - Feature #7639][Open] More freedom for location of comments — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>

14 messages 2012/12/30

[ruby-dev:46723] [Backport93 - Backport #4281] irb don't start up when Encoding.defalut_internal isn't 'utf-8'

From: "naruse (Yui NARUSE)" <naruse@...>
Date: 2012-12-10 14:00:18 UTC
List: ruby-dev #46723
Issue #4281 has been updated by naruse (Yui NARUSE).


keiju (Keiju Ishitsuka) wrote:
> けいじゅ@いしつかです.
>  
>  mame (Yusuke Endoh) <mame@tsg.ne.jp> wrote:
>  
>  > Yugui さんからもいしつかさんからも反応がない。
>  
>  こちらで対応しますと回答した覚えがありますが, そのままになっていました.
>  申し訳ない.
>  
>  いろいろと溜っているので, そろそろやらなくちゃいけないなと思っていると
>  ころです.
>  
>  ところで, リリースに至るまでのスケジュールがよく分かっていないのですが,
>  いつまでに対応しなくてはならないでしょう?

もうnariさんに入れてもらったので大丈夫です。
再修正したい場合は今月中、とかでしたっけ。
----------------------------------------
Backport #4281: irb don't start up when Encoding.defalut_internal isn't 'utf-8'
https://bugs.ruby-lang.org/issues/4281#change-34588

Author: authorNari (Narihiro Nakamura)
Status: Assigned
Priority: Normal
Assignee: usa (Usaku NAKAMURA)
Category: 
Target version: 


=begin
 nariです。
 
 以下のようにすると irb が起動しません。
  $ ruby -S -E cp932:cp932 irb
  /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/locale.rb:135:in `eval': /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/lc/ja/error.rb:16: invalid multibyte char (UTF-8) (SyntaxError)
  /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/lc/ja/error.rb:16: invalid multibyte char (UTF-8)
  /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/lc/ja/error.rb:16: syntax error, unexpected $end, expecting keyword_end
    def_exception :UnrecognizedSwitch, 'スイッチ(%s)が分りません'
                                           ^
          from /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/locale.rb:135:in `real_load'
          from /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/locale.rb:125:in `block in load'
          from /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/locale.rb:123:in `each'
          from /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/locale.rb:123:in `load'
          from /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/init.rb:122:in `init_error'
          from /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/init.rb:17:in `setup'
          from /home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb.rb:53:in `start'
          from /home/nari/.rvm/rubies/ruby-1.9.2-p136/bin/irb:16:in `<main>'
 
 再現コードは以下です。
  $ cat /tmp/t.rb
  require "irb"
  Encoding.default_internal = "cp932"
  Encoding.default_external = "cp932"
  # pathはRubyのインストール先に合わせて変えてください
  path = "/home/nari/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/lc/ja/error.rb"
  src = IRB::MagicFile.open(path){|f| f.read}
  p src
  eval(src)
 
  $ ruby /tmp/t.rb
  #<Encoding:Windows-31J>
  /tmp/t.rb:8:in `eval': (eval):16: invalid multibyte char (UTF-8) (SyntaxError)
  (eval):16: invalid multibyte char (UTF-8)
  (eval):16: syntax error, unexpected $end, expecting keyword_end
    def_exception :UnrecognizedSwitch, 'スイッチ(%s)が分りません'
                                           ^
          from /tmp/t.rb:8:in `<main>'
 
 cp932に変換された文字列(src)の中に、utf-8を指定するマジックコメントが入っ
 ており、utf-8の文字列としてeval()されるのが原因のようです。
 
 Encoding.default_internalが指定されるようなケースまで標準ライブラリが対
 応する必要はないのかもしれませんが、情報共有の意味も込めて報告しておき
 ます。
 
 この問題については以下のパッチで直ることを確認しています。
 
 diff --git a/lib/irb/magic-file.rb b/lib/irb/magic-file.rb
 index 8612620..339ed60 100644
 --- a/lib/irb/magic-file.rb
 +++ b/lib/irb/magic-file.rb
 @@ -8,9 +8,10 @@ module IRB
        line = io.gets
        line = io.gets if line[0,2] == "#!"
        encoding = detect_encoding(line)
 +      internal_encoding = encoding
        encoding ||= default_src_encoding
        io.rewind
 -      io.set_encoding(encoding, nil)
 +      io.set_encoding(encoding, internal_encoding)
 
        if block_given?
          begin
=end



-- 
http://bugs.ruby-lang.org/

In This Thread

Prev Next