зеркало из https://github.com/github/ruby.git
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
This commit is contained in:
Родитель
0e8807dba5
Коммит
8ad8407e60
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
Загрузка…
Ссылка в новой задаче