[#42735] [Ruby 1.9-Feature#4147][Open] Array#sample で重みを指定したい — Yoji Ojima <redmine@...>

Feature #4147: Array#sample で重みを指定したい

52 messages 2010/12/10
[#42791] [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Shyouhei Urabe <redmine@...> 2010/12/18

チケット #4147 が更新されました。 (by Shyouhei Urabe)

[#42800] Re: [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Masaya TARUI <tarui@...> 2010/12/19

> じゃあ反対ないので実装はともかく、この仕様は基本入れる方向で考えましょう。反対の人は意思表示お早めに。

[#42763] [Ruby 1.9-Bug#4159][Open] test_block_variables(TestRipper::ParserEvents) が失敗する — Kouhei Yanagita <redmine@...>

Bug #4159: test_block_variables(TestRipper::ParserEvents) が失敗する

8 messages 2010/12/14

[#42894] [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Shyouhei Urabe <redmine@...>

Feature #4207: これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには

24 messages 2010/12/26
[#42935] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/04

むらたです。

[#42936] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/05

むらたです。

[ruby-dev:42674] [Ruby 1.9-Bug#4112][Assigned] StringIO#gets(limit) returns incomplete string

From: Nobuyoshi Nakada <redmine@...>
Date: 2010-12-02 21:58:58 UTC
List: ruby-dev #42674
Bug #4112: StringIO#gets(limit) returns incomplete string
http://redmine.ruby-lang.org/issues/show/4112

起票者: Nobuyoshi Nakada
ステータス: Assigned, 優先度: Normal
担当者: Nobuyoshi Nakada, カテゴリ: ext
ruby -v: 1.9.3 r30061

StringIO#getsに長さを指定したとき、マルチバイト文字が途中で切れることがあります。

  StringIO.new("\u3042").gets(1) #=> "\xE3"
  StringIO.new("a".encode("utf-16be")).gets(1) #=> "\x00"


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

Attachments (1)

stringio_gets.diff (1.05 KB, text/x-diff)
diff --git i/ext/stringio/stringio.c w/ext/stringio/stringio.c
index 75f8cd7..7edf711 100644
--- i/ext/stringio/stringio.c
+++ w/ext/stringio/stringio.c
@@ -954,7 +954,7 @@ strio_getline(int argc, VALUE *argv, struct StringIO *ptr)
     e = s + RSTRING_LEN(ptr->string);
     s += ptr->pos;
     if (limit > 0 && s + limit < e) {
-	e = s + limit;
+	e = rb_enc_right_char_head(s, s + limit, e, rb_enc_get(ptr->string));
     }
     if (NIL_P(str)) {
 	str = strio_substr(ptr, ptr->pos, e - s);
diff --git i/test/stringio/test_stringio.rb w/test/stringio/test_stringio.rb
index 30284fa..fee9abd 100644
--- i/test/stringio/test_stringio.rb
+++ w/test/stringio/test_stringio.rb
@@ -378,6 +378,11 @@ class TestStringIO < Test::Unit::TestCase
     assert_equal("a" * 10000 + "zz", f.gets("zz"))
     f = StringIO.new("a" * 10000 + "zz!")
     assert_equal("a" * 10000 + "zz!", f.gets("zzz"))
+
+    ["a".encode("utf-16be"), "\u3042"].each do |s|
+      assert_equal(s, StringIO.new(s).gets(1))
+      assert_equal(s, StringIO.new(s).gets(nil, 1))
+    end
   end
 
   def test_each

In This Thread

Prev Next