1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/dl/cfunc.c (rb_dlcfunc_call): convert signed value to

unsigned.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26681 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2010-02-16 10:19:24 +00:00
parent da2497745e
commit 4d71618c38
2 changed files with 18 additions and 4 deletions

View file

@ -1,3 +1,8 @@
Tue Feb 16 19:19:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/dl/cfunc.c (rb_dlcfunc_call): convert signed value to
unsigned.
Tue Feb 16 19:02:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* test/dl/test_{base,handle}.rb: use more verbose assertions.

View file

@ -347,12 +347,21 @@ rb_dlcfunc_call(VALUE self, VALUE ary)
return Qnil;
}
if( RARRAY_LEN(ary) >= DLSTACK_SIZE ){
rb_raise(rb_eDLError, "too many arguments (stack overflow)");
}
for( i = 0; i < RARRAY_LEN(ary); i++ ){
if( i >= DLSTACK_SIZE ){
rb_raise(rb_eDLError, "too many arguments (stack overflow)");
unsigned long rb_big2ulong_pack(VALUE x);
VALUE arg = RARRAY_PTR(ary)[i];
rb_check_safe_obj(arg);
if (FIXNUM_P(arg)) {
stack[i] = FIX2LONG(arg);
}
else {
Check_Type(arg, T_BIGNUM);
stack[i] = rb_big2ulong_pack(arg);
}
rb_check_safe_obj(RARRAY_PTR(ary)[i]);
stack[i] = NUM2LONG(RARRAY_PTR(ary)[i]);
}
/* calltype == CFUNC_CDECL */