diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | ext/dl/cfunc.c | 2 |
2 files changed, 9 insertions, 1 deletions
@@ -1,3 +1,11 @@ +Mon Jun 24 22:04:02 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com> + + * 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. + Mon Jun 24 22:04:00 2013 Charlie Somerville <charliesome@ruby-lang.org> * eval_error.c (warn_printf): use rb_vsprintf instead so ruby specific 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 { |