diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-06-19 04:24:34 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-06-19 04:24:34 +0000 |
| commit | 2f3a3bb087f9b3316d82a9b6ea96f028259d6bdb (patch) | |
| tree | 4ade10eb6b50062e62aaf32df9659ed9775959ae /eval.c | |
| parent | 28fbbf2606df114e1e5229f2a0ab15322ee9a80b (diff) | |
| download | ruby-2f3a3bb087f9b3316d82a9b6ea96f028259d6bdb.tar.gz ruby-2f3a3bb087f9b3316d82a9b6ea96f028259d6bdb.tar.xz ruby-2f3a3bb087f9b3316d82a9b6ea96f028259d6bdb.zip | |
* eval.c (method_call): allow changing $SAFE. [ruby-dev:23713]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@6476 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -8691,7 +8691,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) { @@ -8699,15 +8699,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; } |
