From: "ko1 (Koichi Sasada)" Date: 2013-08-09T19:33:01+09:00 Subject: [ruby-dev:47603] [ruby-trunk - Bug #8698] レシーバに不正なバイト列が含まれている場合にString#each_lineや#linesの挙動が引数の有無で変わってしまう Issue #8698 has been updated by ko1 (Koichi Sasada). Assignee set to naruse (Yui NARUSE) ---------------------------------------- Bug #8698: レシーバに不正なバイト列が含まれている場合にString#each_lineや#linesの挙動が引数の有無で変わってしまう https://bugs.ruby-lang.org/issues/8698#change-41023 Author: Glass_saga (Masaki Matsushita) Status: Open Priority: Normal Assignee: naruse (Yui NARUSE) Category: core Target version: current: 2.1.0 ruby -v: ruby 2.1.0dev (2013-07-28 trunk 42211) [x86_64-linux] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN String#each_lineや#linesは、レシーバに不正なバイト列が含まれている場合に引数無しで呼ばれると例外を発生させませんが、 引数を与えると例外を発生させます。 invalid_str = "\x80" * 3 invalid_str.each_line {} # no error invalid_str.each_line("foo") {} # invalid byte sequence in UTF-8 (ArgumentError) invalid_str.lines # no error invalid_str.lines("foo") # # invalid byte sequence in UTF-8 (ArgumentError) レシーバに不正なバイト列が含まれている場合の挙動が引数の有無で変わってしまうというのは、仕様のバグではないでしょうか。 String#each_lineや#linesは引数を渡さずに使われる場合が多いと思うので、そちらの挙動に寄せて 「String#each_lineや#linesはレシーバに不正なバイト列が含まれていても例外を発生させない」という仕様に統一する事を提案します。 添付のpatchは引数の有無に関わらずrb_memsearch()を使って検索を行う事で上記の仕様に統一したもので、[Feature #7368]で提案している patch3.diffに少し手を加えたものです。また、test/ruby/test_m17n_comb.rbに引数を与えて#each_lineを呼ぶと例外が発生する事を期待している テストがあるので、その部分を削っています。 -- http://bugs.ruby-lang.org/