From: sheepman Date: 2008-01-16T22:18:39+09:00 Subject: [ruby-dev:33136] enc_register_at should use strdup こんばんは sheepman です。 次のようなコードでエラーになります。 require は関係ありません。エンコーディング名を表す文字列が GC されてしまうようです。 $ cat t.rb #-*- coding: euc-jp -*- 100.times do Encoding.find("Windows" + "-1255") require 'drb' end $ ruby-1.9 -v t.rb ruby 1.9.0 (2008-01-16 revision 0) [i686-linux] t.rb:3:in `find': unknown encoding name - Windows-1255 (ArgumentError) from t.rb:4:in `block in
' from t.rb:3:in `times' from t.rb:3:in `
' 以下はパッチです。 Index: encoding.c =================================================================== --- encoding.c (revision 15080) +++ encoding.c (working copy) @@ -146,11 +146,11 @@ { struct rb_encoding_entry *ent = &enc_table.list[index]; - ent->name = name; + ent->name = strdup(name); if (!ent->enc) ent->enc = malloc(sizeof(rb_encoding)); *ent->enc = *encoding; encoding = ent->enc; - encoding->name = name; + encoding->name = strdup(name); encoding->ruby_encoding_index = index; if (rb_cEncoding) { /* initialize encoding data */ -- sheepman / TAMURA Takashi sheepman@sheepman.sakura.ne.jp