* 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:
parent
da2497745e
commit
4d71618c38
@ -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>
|
Tue Feb 16 19:02:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* test/dl/test_{base,handle}.rb: use more verbose assertions.
|
* test/dl/test_{base,handle}.rb: use more verbose assertions.
|
||||||
|
@ -347,12 +347,21 @@ rb_dlcfunc_call(VALUE self, VALUE ary)
|
|||||||
return Qnil;
|
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++ ){
|
for( i = 0; i < RARRAY_LEN(ary); i++ ){
|
||||||
if( i >= DLSTACK_SIZE ){
|
unsigned long rb_big2ulong_pack(VALUE x);
|
||||||
rb_raise(rb_eDLError, "too many arguments (stack overflow)");
|
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 */
|
/* calltype == CFUNC_CDECL */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user