diff --git a/ChangeLog b/ChangeLog index 20eadc252c4d01..8db996077045d5 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 ed42213d17b51a..b2f438e4752a05 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 f5344815ae9b63..ec3327f8cf9a72 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 674877c46609cb..a148434fa091e6 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 bef92c41c6d2b1..6694e2f8fa7c4b 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 d1a371b4ee90bb..53b92bc8cc3eee 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));