summaryrefslogtreecommitdiff
path: root/encoding.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-18 06:56:06 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-18 06:56:06 +0000
commitb66eb536507d4837948d615ef61b25c01a2e07ff (patch)
tree77710170c01c6396f5a541cb0d7b8cb669d931ea /encoding.c
parent4d1ee83e3c1e87597e0abb15dffd15d4b450d9be (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.c14
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;
}