[ruby-dev:24328] Re: Struct#[] dumps core

From: nobu@...
Date: 2004-09-24 00:36:56 UTC
List: ruby-dev #24328
なかだです。

At Thu, 23 Sep 2004 19:23:25 +0900,
Tanaka Akira wrote in [ruby-dev:24320]:
> 次のようにすると core を吐きます。
> 
> % ./ruby -e '
> S = Struct.new("S", :aaa)
> o = S.new(1)
> members = ObjectSpace.each_object(Array) {|v| break v if v[0] == :aaa }
> members.replace(("a".."zz").map {|s| s.intern })
> p o[:zz]
> '
> -e:6: [BUG] Segmentation fault
> ruby 1.9.0 (2004-09-22) [i686-linux]
> 
> zsh: abort (core dumped)  ./ruby -e 

なんか反則っぽくなって来ましたが。まぁこれは単純に変更不可でい
いんではないでしょうか。


Index: struct.c
===================================================================
RCS file: /cvs/ruby/src/ruby/struct.c,v
retrieving revision 1.57
diff -u -2 -p -r1.57 struct.c
--- struct.c	3 Sep 2004 09:00:51 -0000	1.57
+++ struct.c	24 Sep 2004 00:35:28 -0000
@@ -184,4 +184,5 @@ make_struct(name, member, klass)
 	nstr = rb_define_class_under(klass, cname, klass);
     }
+    rb_obj_freeze(member);
     rb_iv_set(nstr, "__size__", LONG2NUM(RARRAY(member)->len));
     rb_iv_set(nstr, "__member__", member);


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

In This Thread