mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
enumerator.c: rb_check_funcall
* enumerator.c (enumerator_size): use rb_check_funcall() instead of respond_to? and call. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42707 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9b4b5ad27c
commit
1af4196cdf
2 changed files with 12 additions and 9 deletions
|
@ -1,4 +1,7 @@
|
||||||
Tue Aug 27 16:51:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Tue Aug 27 16:56:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* enumerator.c (enumerator_size): use rb_check_funcall() instead of
|
||||||
|
respond_to? and call.
|
||||||
|
|
||||||
* enumerator.c (enumerator_each): ensure that argument array size
|
* enumerator.c (enumerator_each): ensure that argument array size
|
||||||
does not overflow at appending.
|
does not overflow at appending.
|
||||||
|
|
16
enumerator.c
16
enumerator.c
|
@ -1007,19 +1007,19 @@ static VALUE
|
||||||
enumerator_size(VALUE obj)
|
enumerator_size(VALUE obj)
|
||||||
{
|
{
|
||||||
struct enumerator *e = enumerator_ptr(obj);
|
struct enumerator *e = enumerator_ptr(obj);
|
||||||
|
int argc = 0;
|
||||||
|
const VALUE *argv = NULL;
|
||||||
|
VALUE size;
|
||||||
|
|
||||||
if (e->size_fn) {
|
if (e->size_fn) {
|
||||||
return (*e->size_fn)(e->obj, e->args, obj);
|
return (*e->size_fn)(e->obj, e->args, obj);
|
||||||
}
|
}
|
||||||
if (rb_respond_to(e->size, id_call)) {
|
if (e->args) {
|
||||||
if (e->args) {
|
argc = (int)RARRAY_LEN(e->args);
|
||||||
int argc = (int)RARRAY_LEN(e->args);
|
argv = RARRAY_RAWPTR(e->args);
|
||||||
VALUE *argv = RARRAY_PTR(e->args);
|
|
||||||
return rb_funcall2(e->size, id_call, argc, argv);
|
|
||||||
} else {
|
|
||||||
return rb_funcall(e->size, id_call, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
size = rb_check_funcall(e->size, id_call, argc, argv);
|
||||||
|
if (size != Qundef) return size;
|
||||||
return e->size;
|
return e->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue