From d4db9e9c6091e5763a869792f63006fb0498a1b8 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 25 Mar 2003 03:11:27 +0000 Subject: [PATCH] * io.c (rb_io_initialize): should check rb_secure(4). * dir.c (dir_s_getwd): should check rb_secure(4). * object.c (rb_obj_infect): function version of OBJ_INFECT(). * eval.c (rb_secure_update): new function to check object update. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3611 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 10 ++++++++++ dir.c | 8 ++++++-- eval.c | 7 +++++++ io.c | 1 + object.c | 7 +++++++ ruby.h | 3 +++ 6 files changed, 34 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 20eadc252c..8db9960770 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Tue Mar 25 12:01:54 2003 Yukihiro Matsumoto + + * io.c (rb_io_initialize): should check rb_secure(4). + + * dir.c (dir_s_getwd): should check rb_secure(4). + + * object.c (rb_obj_infect): function version of OBJ_INFECT(). + + * eval.c (rb_secure_update): new function to check object update. + Tue Mar 25 10:18:05 2003 Minero Aoki * ext/strscan/strscan.c: should infect also return values of diff --git a/dir.c b/dir.c index ed42213d17..b2f438e475 100644 --- a/dir.c +++ b/dir.c @@ -493,8 +493,12 @@ static VALUE dir_s_getwd(dir) VALUE dir; { - char *path = my_getcwd(); - VALUE cwd = rb_tainted_str_new2(path); + char *path; + VALUE cwd; + + rb_secure(4); + path = my_getcwd(); + cwd = rb_tainted_str_new2(path); free(path); return cwd; diff --git a/eval.c b/eval.c index f5344815ae..ec3327f8cf 100644 --- a/eval.c +++ b/eval.c @@ -138,6 +138,13 @@ rb_secure(level) } } +void +rb_secure_update(obj) + VALUE obj; +{ + if (!OBJ_TAINTED(obj)) rb_secure(4); +} + void rb_check_safe_obj(x) VALUE x; diff --git a/io.c b/io.c index 674877c466..a148434fa0 100644 --- a/io.c +++ b/io.c @@ -2826,6 +2826,7 @@ rb_io_initialize(argc, argv, io) int fd, flags; char mbuf[4]; + rb_secure(4); rb_scan_args(argc, argv, "11", &fnum, &mode); fd = NUM2INT(fnum); if (argc == 2) { diff --git a/object.c b/object.c index bef92c41c6..6694e2f8fa 100644 --- a/object.c +++ b/object.c @@ -357,6 +357,13 @@ rb_obj_untaint(obj) return obj; } +void +rb_obj_infect(obj1, obj2) + VALUE obj1, obj2; +{ + OBJ_INFECT(obj1, obj2); +} + VALUE rb_obj_freeze(obj) VALUE obj; diff --git a/ruby.h b/ruby.h index d1a371b4ee..53b92bc8cc 100644 --- a/ruby.h +++ b/ruby.h @@ -230,6 +230,7 @@ void rb_secure _((int)); RUBY_EXTERN int ruby_safe_level; #define rb_safe_level() (ruby_safe_level) void rb_set_safe_level _((int)); +void rb_secure_update _((VALUE)); long rb_num2long _((VALUE)); unsigned long rb_num2ulong _((VALUE)); @@ -457,6 +458,8 @@ struct RBignum { #define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), sizeof(type)*(n)) #define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), sizeof(type)*(n)) +void rb_obj_infect _((VALUE,VALUE)); + void rb_glob _((char*,void(*)(const char*,VALUE),VALUE)); void rb_globi _((char*,void(*)(const char*,VALUE),VALUE));