diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-03-24 09:38:37 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-03-24 09:38:37 +0000 |
commit | ece972717b2e752532b222f03500f23b03280327 (patch) | |
tree | 14f984d7ad39dd888fbc20837e8fd6cfd236b20e /object.c | |
parent | ab7dac4027c063222ad5e4ea68012020f97c047d (diff) |
security enhancement of dl library (need test).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3609 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -773,12 +773,14 @@ ID rb_to_id(name) VALUE name; { + VALUE tmp; ID id; switch (TYPE(name)) { case T_STRING: return rb_intern(RSTRING(name)->ptr); case T_FIXNUM: + rb_warn("do not use Fixnums as Symbols"); id = FIX2LONG(name); if (!rb_id2name(id)) { rb_raise(rb_eArgError, "%ld is not a symbol", id); @@ -788,6 +790,10 @@ rb_to_id(name) id = SYM2ID(name); break; default: + tmp = rb_check_string_type(name); + if (!NIL_P(tmp)) { + return rb_intern(RSTRING(tmp)->ptr); + } rb_raise(rb_eTypeError, "%s is not a symbol", RSTRING(rb_inspect(name))->ptr); } return id; |