diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-01-21 07:43:41 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-01-21 07:43:41 +0000 |
commit | 4c2c8f099c305476c0361937c12f59fd5bfbc788 (patch) | |
tree | aa9e156cbc680ee49ba0fa1bf9bd15d41676e7c9 /eval.c | |
parent | 551de15b61b773c3460e6b574df4ef4f7dc09807 (diff) |
* eval.c (ruby_stop): should not trace error handler.
* io.c (io_write): should not raise exception on O_NONBLOCK io.
* dir.c (dir_set_pos): seek should return dir, pos= should not.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 30 |
1 files changed, 21 insertions, 9 deletions
@@ -1166,6 +1166,8 @@ ruby_stop(ex) POP_ITER(); POP_TAG(); + trace_func = 0; + tracing = 0; ex = error_handle(ex); ruby_finalize(); exit(ex); @@ -6269,22 +6271,30 @@ proc_save_safe_level(data) } } -static void -proc_set_safe_level(data) +static int +proc_get_safe_level(data) VALUE data; { if (OBJ_TAINTED(data)) { switch (RBASIC(data)->flags & PROC_TMASK) { case PROC_T3: - ruby_safe_level = 3; - break; + return 3; case PROC_T4: - ruby_safe_level = 4; - break; + return 4; case PROC_TMAX: - ruby_safe_level = 5; - break; + return 5; } + return 3; + } + return 0; +} + +static void +proc_set_safe_level(data) + VALUE data; +{ + if (OBJ_TAINTED(data)) { + ruby_safe_level = proc_get_safe_level(data); } } @@ -6528,7 +6538,9 @@ block_pass(self, node) } if (rb_safe_level() >= 1 && OBJ_TAINTED(block)) { - rb_raise(rb_eSecurityError, "Insecure: tainted block value"); + if (rb_safe_level() > proc_get_safe_level(block)) { + rb_raise(rb_eSecurityError, "Insecure: tainted block value"); + } } Data_Get_Struct(block, struct BLOCK, data); |