mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* st.c: primes should be primes.
* eval.c (is_defined): method defined? check should honor protected too. * eval.c (block_pass): should not pass tainted block, if $SAFE > 0. * variable.c (rb_mod_remove_cvar): should pass the char*. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1996 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
17e1cfef8c
commit
c0a636b6f9
7 changed files with 76 additions and 29 deletions
17
ChangeLog
17
ChangeLog
|
@ -1,3 +1,7 @@
|
|||
Wed Jan 16 18:25:08 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* st.c: primes should be primes.
|
||||
|
||||
Wed Jan 16 12:29:14 2002 Tanaka Akira <akr@m17n.org>
|
||||
|
||||
* lib/timeout.rb (timeout): new optional argument to specify an
|
||||
|
@ -15,6 +19,19 @@ Wed Jan 16 11:12:30 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
|
|||
* class.c (rb_class_inherited): should use Object when no super
|
||||
class.
|
||||
|
||||
Tue Jan 15 01:11:44 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* eval.c (is_defined): method defined? check should honor
|
||||
protected too.
|
||||
|
||||
Mon Jan 14 13:06:02 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* eval.c (block_pass): should not pass tainted block, if $SAFE > 0.
|
||||
|
||||
Sun Jan 13 09:31:41 2002 Koji Arai <jca02266@nifty.ne.jp>
|
||||
|
||||
* variable.c (rb_mod_remove_cvar): should pass the char*.
|
||||
|
||||
Fri Jan 11 05:06:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
|
||||
|
||||
* class.c (rb_make_metaclass): [new]
|
||||
|
|
27
eval.c
27
eval.c
|
@ -1801,7 +1801,23 @@ is_defined(self, node, buf)
|
|||
return 0;
|
||||
}
|
||||
check_bound:
|
||||
if (rb_method_boundp(val, node->nd_mid, nd_type(node)== NODE_CALL)) {
|
||||
{
|
||||
int call = nd_type(node)== NODE_CALL;
|
||||
if (call) {
|
||||
int noex;
|
||||
ID id = node->nd_mid;
|
||||
|
||||
if (!rb_get_method_body(&val, &id, &noex))
|
||||
break;
|
||||
if ((noex & NOEX_PRIVATE))
|
||||
break;
|
||||
if ((noex & NOEX_PROTECTED) &&
|
||||
!rb_obj_is_kind_of(self, rb_class_real(val)))
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (!rb_method_boundp(val, node->nd_mid, call))
|
||||
break;
|
||||
return arg_defined(self, node->nd_args, buf, "method");
|
||||
}
|
||||
break;
|
||||
|
@ -4634,10 +4650,7 @@ rb_call(klass, recv, mid, argc, argv, scope)
|
|||
|
||||
/* self must be kind of a specified form for private method */
|
||||
if ((noex & NOEX_PROTECTED)) {
|
||||
VALUE defined_class = klass;
|
||||
while (TYPE(defined_class) == T_ICLASS)
|
||||
defined_class = RBASIC(defined_class)->klass;
|
||||
if (!rb_obj_is_kind_of(ruby_frame->self, defined_class))
|
||||
if (!rb_obj_is_kind_of(ruby_frame->self, rb_class_real(klass)))
|
||||
return rb_undefined(recv, mid, argc, argv, CSTAT_PROT);
|
||||
}
|
||||
}
|
||||
|
@ -6564,6 +6577,10 @@ block_pass(self, node)
|
|||
rb_class2name(CLASS_OF(block)));
|
||||
}
|
||||
|
||||
if (rb_safe_level() >= 1 && OBJ_TAINTED(block)) {
|
||||
rb_raise(rb_eSecurityError, "Insecure: tainted block value");
|
||||
}
|
||||
|
||||
Data_Get_Struct(block, struct BLOCK, data);
|
||||
orphan = blk_orphan(data);
|
||||
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
|
||||
#if defined(HAVE_SYS_CDEFS_H)
|
||||
# include <sys/cdefs.h>
|
||||
#else
|
||||
#endif
|
||||
#if !defined(__BEGIN_DECLS)
|
||||
# define __BEGIN_DECLS
|
||||
# define __END_DECLS
|
||||
#endif
|
||||
|
|
4
parse.y
4
parse.y
|
@ -4278,9 +4278,7 @@ gettable(id)
|
|||
return NEW_FALSE();
|
||||
}
|
||||
else if (id == k__FILE__) {
|
||||
VALUE f = rb_str_new2(ruby_sourcefile);
|
||||
OBJ_FREEZE(f);
|
||||
return NEW_LIT(f);
|
||||
return NEW_STR(rb_str_new2(ruby_sourcefile));
|
||||
}
|
||||
else if (id == k__LINE__) {
|
||||
return NEW_LIT(INT2FIX(ruby_sourceline));
|
||||
|
|
|
@ -1313,17 +1313,31 @@ test_ok(defined?($x) == 'global-variable')# returns description
|
|||
foo=5
|
||||
test_ok(defined?(foo)) # local variable
|
||||
|
||||
test_ok(defined?(Array)) # constant
|
||||
test_ok(defined?(Array)) # constant
|
||||
test_ok(defined?(Object.new)) # method
|
||||
test_ok(!defined?(Object.print)) # private method
|
||||
test_ok(defined?(1 == 2)) # operator expression
|
||||
test_ok(!defined?(Object.print))# private method
|
||||
test_ok(defined?(1 == 2)) # operator expression
|
||||
|
||||
class Foo
|
||||
def foo
|
||||
p :foo
|
||||
end
|
||||
protected :foo
|
||||
def bar(f)
|
||||
test_ok(defined?(self.foo))
|
||||
test_ok(defined?(f.foo))
|
||||
end
|
||||
end
|
||||
f = Foo.new
|
||||
test_ok(defined?(f.foo) == nil)
|
||||
f.bar(f)
|
||||
|
||||
def defined_test
|
||||
return !defined?(yield)
|
||||
end
|
||||
|
||||
test_ok(defined_test) # not iterator
|
||||
test_ok(!defined_test{}) # called as iterator
|
||||
test_ok(!defined_test{}) # called as iterator
|
||||
|
||||
test_check "alias"
|
||||
class Alias0
|
||||
|
|
30
st.c
30
st.c
|
@ -86,25 +86,25 @@ static long primes[] = {
|
|||
512 + 9,
|
||||
1024 + 9,
|
||||
2048 + 5,
|
||||
4096 + 83,
|
||||
4096 + 3,
|
||||
8192 + 27,
|
||||
16384 + 43,
|
||||
32768 + 3,
|
||||
65536 + 45,
|
||||
131072 + 9,
|
||||
262144 + 39,
|
||||
524288 + 39,
|
||||
1048576 + 9,
|
||||
2097152 + 5,
|
||||
4194304 + 3,
|
||||
8388608 + 33,
|
||||
16777216 + 27,
|
||||
33554432 + 9,
|
||||
67108864 + 71,
|
||||
134217728 + 39,
|
||||
268435456 + 9,
|
||||
536870912 + 5,
|
||||
1073741824 + 83,
|
||||
131072 + 29,
|
||||
262144 + 3,
|
||||
524288 + 21,
|
||||
1048576 + 7,
|
||||
2097152 + 17,
|
||||
4194304 + 15,
|
||||
8388608 + 9,
|
||||
16777216 + 43,
|
||||
33554432 + 35,
|
||||
67108864 + 15,
|
||||
134217728 + 29,
|
||||
268435456 + 3,
|
||||
536870912 + 11,
|
||||
1073741824 + 85,
|
||||
0
|
||||
};
|
||||
|
||||
|
|
|
@ -1631,7 +1631,7 @@ rb_mod_remove_cvar(mod, name)
|
|||
VALUE val;
|
||||
|
||||
if (!rb_is_class_id(id)) {
|
||||
rb_name_error(id, "wrong class variable name %s", name);
|
||||
rb_name_error(id, "wrong class variable name %s", rb_id2name(id));
|
||||
}
|
||||
if (!OBJ_TAINTED(mod) && rb_safe_level() >= 4)
|
||||
rb_raise(rb_eSecurityError, "Insecure: can't remove class variable");
|
||||
|
|
Loading…
Add table
Reference in a new issue