From 8ad8407e602b09f1ef4e4377a4ca78e4fafec580 Mon Sep 17 00:00:00 2001 From: shirosaki Date: Mon, 24 Jun 2013 13:39:08 +0000 Subject: dl/cfunc.c: fix conversion of Bignum * ext/dl/cfunc.c (rb_dlcfunc_call): fix conversion from Bignum to pointer. sizeof(DLSTACK_TYPE) is larger than sizeof(long) on Windows x64 and higher bits over sizeof(long) of DLSTACK_TYPE was zero even if a pointer value was over 32 bits which causes SEGV on DL::TestCPtr#test_to_ptr_io. Adding a cast solves the bug. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41599 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/dl/cfunc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/dl/cfunc.c') diff --git a/ext/dl/cfunc.c b/ext/dl/cfunc.c index 076f71ae25..46a26be7b8 100644 --- a/ext/dl/cfunc.c +++ b/ext/dl/cfunc.c @@ -372,7 +372,7 @@ rb_dlcfunc_call(VALUE self, VALUE ary) rb_big_pack(arg, ls, sizeof(ls)/sizeof(*ls)); d = 0; for (j = 0; j < (int)(sizeof(ls)/sizeof(*ls)); j++) - d |= ls[j] << (j * sizeof(long) * CHAR_BIT); + d |= (DLSTACK_TYPE)ls[j] << (j * sizeof(long) * CHAR_BIT); stack[i] = d; } else { -- cgit v1.2.3