diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-12-02 12:28:42 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-12-02 12:28:42 +0000 |
commit | 260e8ce6370f2c415d707728ffa249cf92707665 (patch) | |
tree | 907224cdc237ac1e3bad4d0b934028630e07683e | |
parent | 51da92ea1216e9d5139d03308618def2f9d4746a (diff) |
* encoding.c (enc_alias_internal): free the copied key and
return NULL when given key is already regisitered.
* encoding.c (enc_alias): call set_encoding_const only when the
alias is not registered yet.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30052 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | encoding.c | 15 |
2 files changed, 19 insertions, 4 deletions
@@ -1,3 +1,11 @@ +Thu Dec 2 21:22:05 2010 NARUSE, Yui <naruse@ruby-lang.org> + + * encoding.c (enc_alias_internal): free the copied key and + return NULL when given key is already regisitered. + + * encoding.c (enc_alias): call set_encoding_const only when the + alias is not registered yet. + Thu Dec 2 19:58:24 2010 URABE Shyouhei <shyouhei@ruby-lang.org> * vm.c (ruby_vm_at_exit): new API. This enables extension libs to diff --git a/encoding.c b/encoding.c index 76dfac790b..db0f5c8ae6 100644 --- a/encoding.c +++ b/encoding.c @@ -436,12 +436,19 @@ rb_enc_unicode_p(rb_encoding *enc) return name[0] == 'U' && name[1] == 'T' && name[2] == 'F' && name[4] != '7'; } +/* + * Returns copied alias name when the key is added for st_table, + * else returns NULL. + */ static const char * enc_alias_internal(const char *alias, int idx) { - alias = strdup(alias); - st_insert(enc_table.names, (st_data_t)alias, (st_data_t)idx); - return alias; + char *name = strdup(alias); + if (st_insert(enc_table.names, (st_data_t)name, (st_data_t)idx)) { + free(name); + return NULL; + } + return name; } static int @@ -449,7 +456,7 @@ enc_alias(const char *alias, int idx) { if (!valid_encoding_name_p(alias)) return -1; alias = enc_alias_internal(alias, idx); - set_encoding_const(alias, rb_enc_from_index(idx)); + if (alias) set_encoding_const(alias, rb_enc_from_index(idx)); return idx; } |