summaryrefslogtreecommitdiffstats
path: root/object.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-03-24 09:38:37 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-03-24 09:38:37 +0000
commit84216c4e86ab287ea20207f8a25e4a5fe4bfe0bb (patch)
tree14f984d7ad39dd888fbc20837e8fd6cfd236b20e /object.c
parent59fa83c2c93c518c99cad60445f25ef3ce76f14e (diff)
downloadruby-84216c4e86ab287ea20207f8a25e4a5fe4bfe0bb.tar.gz
ruby-84216c4e86ab287ea20207f8a25e4a5fe4bfe0bb.tar.xz
ruby-84216c4e86ab287ea20207f8a25e4a5fe4bfe0bb.zip
security enhancement of dl library (need test).
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@3609 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r--object.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/object.c b/object.c
index 5cfc3ed57..bef92c41c 100644
--- a/object.c
+++ b/object.c
@@ -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;