[ruby-dev:24369] Re: Enumerable#sort_by dumps core

From: nobu@...
Date: 2004-09-29 01:42:15 UTC
List: ruby-dev #24369
なかだです。

At Wed, 29 Sep 2004 00:06:45 +0900,
Tanaka Akira wrote in [ruby-dev:24368]:
> 次のようにすると core を吐きます。
> 
> % ./ruby -e '
> 1.upto(100) {|n|
> arr = (1..100).map {|i| i.to_s }
> class << (arr[n]); self end.send(:define_method, :<=>) {|o|
>   ObjectSpace.each_object(Array) {|a|
>     next unless a.include? o
>     next if a.length != 2
>     a.replace [a[0]]
>  }
>   super o
> }
> begin
> arr.sort_by {|v| v }
> rescue NotImplementedError
> end
> }
> '

それを変えられちゃまずいでしょう。


Index: enum.c
===================================================================
RCS file: /cvs/ruby/src/ruby/enum.c,v
retrieving revision 1.48
diff -u -2 -p -r1.48 enum.c
--- enum.c	21 Sep 2004 03:08:32 -0000	1.48
+++ enum.c	29 Sep 2004 01:37:18 -0000
@@ -394,4 +394,5 @@ sort_by_i(i, ary)
     v = rb_yield(i);
     e = rb_assoc_new(v, i);
+    OBJ_FREEZE(e);
     rb_ary_push(ary, e);
     return Qnil;


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread