From: Nobuyoshi Nakada Date: 2007-06-07T18:27:10+09:00 Subject: [ruby-dev:30922] Re: segv with callcc like なかだです。 At Thu, 7 Jun 2007 17:49:35 +0900, Tadashi Saito wrote in [ruby-dev:30918]: > ふと思い立って、以前akrさんが投げられたcallccでcoreを吐くテストを現状の > 実装でも行ってみました。結果、[ruby-dev:24291]のみが現在でもcoreを吐く > ようです。 いっぱいあって見落としてたみたいですねぇ。1.8でもそのままのような 気がします。 Index: enum.c =================================================================== --- enum.c (revision 12456) +++ enum.c (working copy) @@ -628,5 +628,9 @@ sort_by_cmp(const void *ap, const void * VALUE a = (*(NODE *const *)ap)->u1.value; VALUE b = (*(NODE *const *)bp)->u1.value; + VALUE ary = (VALUE)data; + if (RBASIC(ary)->klass) { + rb_raise(rb_eRuntimeError, "sort_by reentered"); + } return rb_cmpint(rb_funcall(a, id_cmp, 1, b), a, b); } @@ -718,5 +722,6 @@ enum_sort_by(VALUE obj) rb_block_call(obj, id_each, 0, 0, sort_by_i, ary); if (RARRAY_LEN(ary) > 1) { - ruby_qsort(RARRAY_PTR(ary), RARRAY_LEN(ary), sizeof(VALUE), sort_by_cmp, 0); + ruby_qsort(RARRAY_PTR(ary), RARRAY_LEN(ary), sizeof(VALUE), + sort_by_cmp, (void *)ary); } if (RBASIC(ary)->klass) { -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦