diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-01-18 06:56:06 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-01-18 06:56:06 +0000 |
commit | b66eb536507d4837948d615ef61b25c01a2e07ff (patch) | |
tree | 77710170c01c6396f5a541cb0d7b8cb669d931ea /encoding.c | |
parent | 4d1ee83e3c1e87597e0abb15dffd15d4b450d9be (diff) |
* encoding.c (rb_enc_name_list_i, rb_enc_aliases_enc_i): freeze
element strings to be returned.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15110 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'encoding.c')
-rw-r--r-- | encoding.c | 14 |
1 files changed, 9 insertions, 5 deletions
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; } |