diff --git a/ChangeLog b/ChangeLog index e540da545c..15d4f2c39c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Jan 18 15:56:04 2008 Nobuyoshi Nakada + + * encoding.c (rb_enc_name_list_i, rb_enc_aliases_enc_i): freeze + element strings to be returned. + Fri Jan 18 14:36:34 2008 Kazuhiro NISHIYAMA * test/ruby/test_m17n.rb (test_str_dump): added test for diff --git a/encoding.c b/encoding.c index 8b05f15c70..6a7d906c30 100644 --- a/encoding.c +++ b/encoding.c @@ -1112,7 +1112,9 @@ static int rb_enc_name_list_i(st_data_t name, st_data_t idx, st_data_t arg) { VALUE ary = (VALUE)arg; - rb_ary_push(ary, rb_str_new2((char *)name)); + VALUE str = rb_str_new2((char *)name); + OBJ_FREEZE(str); + rb_ary_push(ary, str); return ST_CONTINUE; } @@ -1144,10 +1146,9 @@ static int rb_enc_aliases_enc_i(st_data_t name, st_data_t orig, st_data_t arg) { VALUE *p = (VALUE *)arg; - VALUE aliases = p[0]; - VALUE ary = p[1]; + VALUE aliases = p[0], ary = p[1]; int idx = (int)orig; - VALUE str = rb_ary_entry(ary, idx); + VALUE key, str = rb_ary_entry(ary, idx); if (NIL_P(str)) { rb_encoding *enc = rb_enc_from_index(idx); @@ -1156,9 +1157,12 @@ rb_enc_aliases_enc_i(st_data_t name, st_data_t orig, st_data_t arg) return ST_CONTINUE; } str = rb_str_new2(rb_enc_name(enc)); + OBJ_FREEZE(str); rb_ary_store(ary, idx, str); } - rb_hash_aset(aliases, rb_str_new2((char *)name), str); + key = rb_str_new2((char *)name); + OBJ_FREEZE(key); + rb_hash_aset(aliases, key, str); return ST_CONTINUE; }