aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-06-19 04:24:34 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-06-19 04:24:34 +0000
commit934064ba5ac136bcfeb1b32c76bd064044156dfc (patch)
treec11ba2307ddb0708703da425eff79909924f49fa
parenteba13dbc0499292ada162629a63b5655ecaf3f76 (diff)
downloadruby-934064ba5ac136bcfeb1b32c76bd064044156dfc.tar.gz
* eval.c (method_call): allow changing $SAFE. [ruby-dev:23713]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6476 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--eval.c9
2 files changed, 9 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 2b4fa6f925..ca3232f83c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat Jun 19 13:24:15 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (method_call): allow changing $SAFE. [ruby-dev:23713]
+
Sat Jun 19 01:10:12 2004 Kouhei Sutou <kou@cozmixng.org>
* sample/rss/tdiary_plugin/rss-recent.rb: added more information.
diff --git a/eval.c b/eval.c
index 99a498cdf5..14f651d824 100644
--- a/eval.c
+++ b/eval.c
@@ -8724,7 +8724,7 @@ method_call(argc, argv, method)
VALUE result = Qnil; /* OK */
struct METHOD *data;
int state;
- volatile int safe = ruby_safe_level;
+ volatile int safe = -1;
Data_Get_Struct(method, struct METHOD, data);
if (data->recv == Qundef) {
@@ -8732,15 +8732,16 @@ method_call(argc, argv, method)
}
PUSH_ITER(rb_block_given_p()?ITER_PRE:ITER_NOT);
PUSH_TAG(PROT_NONE);
- if (OBJ_TAINTED(method) && ruby_safe_level < 4) {
- ruby_safe_level = 4;
+ if (OBJ_TAINTED(method)) {
+ safe = ruby_safe_level;
+ if (ruby_safe_level < 4) ruby_safe_level = 4;
}
if ((state = EXEC_TAG()) == 0) {
result = rb_call0(data->klass,data->recv,data->id,data->oid,argc,argv,data->body,0);
}
POP_TAG();
POP_ITER();
- ruby_safe_level = safe;
+ if (safe >= 0) ruby_safe_level = safe;
if (state) JUMP_TAG(state);
return result;
}