Project

General

Profile

Backport #4281

irb don't start up when Encoding.defalut_internal isn't 'utf-8'

Added by authorNari (Narihiro Nakamura) over 8 years ago. Updated almost 7 years ago.

Status:
Closed
Priority:
Normal
[ruby-dev:43036]

Description

=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 `'

再現コードは以下です。
$ 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
'

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

Associated revisions

Revision f04dd0f0
Added by nari almost 7 years ago

  • lib/irb/magic-file.rb: set a encoding, which is detected from the file to read, to the internal encoding. [Bug #4281][ruby-dev:43036]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 38285
Added by nari almost 7 years ago

  • lib/irb/magic-file.rb: set a encoding, which is detected from the file to read, to the internal encoding. [Bug #4281][ruby-dev:43036]

Revision 38285
Added by nari almost 7 years ago

  • lib/irb/magic-file.rb: set a encoding, which is detected from the file to read, to the internal encoding. [Bug #4281][ruby-dev:43036]

Revision 38285
Added by nari almost 7 years ago

  • lib/irb/magic-file.rb: set a encoding, which is detected from the file to read, to the internal encoding. [Bug #4281][ruby-dev:43036]

Revision 38285
Added by nari almost 7 years ago

  • lib/irb/magic-file.rb: set a encoding, which is detected from the file to read, to the internal encoding. [Bug #4281][ruby-dev:43036]

Revision 38285
Added by nari almost 7 years ago

  • lib/irb/magic-file.rb: set a encoding, which is detected from the file to read, to the internal encoding. [Bug #4281][ruby-dev:43036]

Revision 38285
Added by nari almost 7 years ago

  • lib/irb/magic-file.rb: set a encoding, which is detected from the file to read, to the internal encoding. [Bug #4281][ruby-dev:43036]

Revision 1ab4abf8
Added by usa (Usaku NAKAMURA) almost 7 years ago

merge revision(s) 38285: [Backport #4281]

    * lib/irb/magic-file.rb: set a encoding, which is detected from
      the file to read, to the internal encoding.
      [Bug #4281][ruby-dev:43036]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@38313 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 38313
Added by usa (Usaku NAKAMURA) almost 7 years ago

merge revision(s) 38285: [Backport #4281]

* lib/irb/magic-file.rb: set a encoding, which is detected from
  the file to read, to the internal encoding.
  [Bug #4281][ruby-dev:43036]

History

Updated by naruse (Yui NARUSE) over 8 years ago

  • Category changed from ext to lib
  • Status changed from Open to Assigned
  • Assignee set to keiju (Keiju Ishitsuka)

これどうですかね

Updated by nahi (Hiroshi Nakamura) about 8 years ago

  • Target version changed from 1.9.2 to 1.9.3

Updated by keiju (Keiju Ishitsuka) about 8 years ago

  • Assignee changed from keiju (Keiju Ishitsuka) to yugui (Yuki Sonoda)

この件は、Yuguiさんにお願いして良いですか?

Updated by kosaki (Motohiro KOSAKI) about 8 years ago

  • Target version changed from 1.9.3 to 2.0.0

1.9.3には明らかに too lateだと思います。申し訳ありませんが、target versionを変更させていただきます。

Updated by naruse (Yui NARUSE) about 8 years ago

  • Target version changed from 2.0.0 to 1.9.3

いや、これは1.9.3で残しておくべきでしょう、バグ報告はかなり前だしパッチもあるんだし。
Yuguiさん判断がよろしいんじゃないですかね。

Updated by mame (Yusuke Endoh) over 7 years ago

  • Assignee changed from yugui (Yuki Sonoda) to keiju (Keiju Ishitsuka)
  • Target version changed from 1.9.3 to 2.0.0

いしつかさん

Yugui さんから反応ないみたいなんで、いしつかさんの方で対応して頂けますでしょうか。
とりあえず trunk でお願いします。
バックポートが必要かどうかは、trunk の後で考えましょう。

--
Yusuke Endoh mame@tsg.ne.jp

Updated by mame (Yusuke Endoh) almost 7 years ago

Yugui さんからもいしつかさんからも反応がない。
誰でもいいので、パッチを試してみて、問題無さそうならコミットして、様子をみてくれるコミッタはいませんか。

--
Yusuke Endoh mame@tsg.ne.jp

Updated by naruse (Yui NARUSE) almost 7 years ago

  • Assignee changed from keiju (Keiju Ishitsuka) to authorNari (Narihiro Nakamura)

mame (Yusuke Endoh) wrote:

Yugui さんからもいしつかさんからも反応がない。
誰でもいいので、パッチを試してみて、問題無さそうならコミットして、様子をみてくれるコミッタはいませんか。

nari さんコミットしてください

#9

Updated by authorNari (Narihiro Nakamura) almost 7 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r38285.
Narihiro, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • lib/irb/magic-file.rb: set a encoding, which is detected from the file to read, to the internal encoding. [Bug #4281][ruby-dev:43036]
#10

Updated by naruse (Yui NARUSE) almost 7 years ago

  • Tracker changed from Bug to Backport
  • Project changed from Ruby master to Backport193
  • Category deleted (lib)
  • Status changed from Closed to Assigned
  • Assignee changed from authorNari (Narihiro Nakamura) to usa (Usaku NAKAMURA)
  • Target version deleted (2.0.0)

Updated by keiju (Keiju Ishitsuka) almost 7 years ago

けいじゅ@いしつかです.

mame (Yusuke Endoh) mame@tsg.ne.jp wrote:

Yugui さんからもいしつかさんからも反応がない。

こちらで対応しますと回答した覚えがありますが, そのままになっていました.
申し訳ない.

いろいろと溜っているので, そろそろやらなくちゃいけないなと思っていると
ころです.

ところで, リリースに至るまでのスケジュールがよく分かっていないのですが,
いつまでに対応しなくてはならないでしょう?

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

Updated by naruse (Yui NARUSE) almost 7 years ago

keiju (Keiju Ishitsuka) wrote:

けいじゅ@いしつかです.

mame (Yusuke Endoh) mame@tsg.ne.jp wrote:

Yugui さんからもいしつかさんからも反応がない。

こちらで対応しますと回答した覚えがありますが, そのままになっていました.
申し訳ない.

いろいろと溜っているので, そろそろやらなくちゃいけないなと思っていると
ころです.

ところで, リリースに至るまでのスケジュールがよく分かっていないのですが,
いつまでに対応しなくてはならないでしょう?

もうnariさんに入れてもらったので大丈夫です。
再修正したい場合は今月中、とかでしたっけ。

#13

Updated by usa (Usaku NAKAMURA) almost 7 years ago

  • Status changed from Assigned to Closed

This issue was solved with changeset r38313.
Narihiro, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


merge revision(s) 38285: [Backport #4281]

* lib/irb/magic-file.rb: set a encoding, which is detected from
  the file to read, to the internal encoding.
  [Bug #4281][ruby-dev:43036]

Also available in: Atom PDF